คำนำ :
พูดตามตรงว่า
Sandals ยังคิดว่า UTF8 เป็นสิ่งที่ดี...
ท้ายที่สุดแล้ว การแสดงจีน ญี่ปุ่น และเกาหลีใต้บนหน้าจอเดียวกันนั้นน่าดึงดูดมากสำหรับชาวเอเชียตะวันออก...
(แน่นอนว่าสิทธิประโยชน์ไม่ได้จำกัดอยู่เพียงเท่านี้...)
ไม่ใช่แค่เว็บโปรแกรม...
เคอร์เนลของแอปพลิเคชั่นจำนวนมากเริ่มใช้การเข้ารหัส Unicode...
วัตถุประสงค์ชัดเจน: รองรับการแสดงผลหลายภาษา...
ซอฟต์แวร์ Microsoft ทั้งหมดเป็นแบบ Unicode...
ดังนั้นซอฟต์แวร์ภาษาญี่ปุ่นจึงสามารถแสดงผลได้ตามปกติบน XP จีนของคุณ...
และภาษาจีน 98 จะทำให้อักขระที่อ่านไม่ออกเมื่อติดตั้งซอฟต์แวร์ภาษาอื่นบนเคอร์เนล GB...
สำหรับ UTF8
อาจกล่าวได้ว่าเป็นสาขาของ Unicode
มันใช้สามไบต์ในการบันทึกตัวอักษรจีน...
(Unicode ใช้สี่ไบต์)
แอพพลิเคชั่นซอฟต์แวร์ได้ชำรุดโดยรวมเป็น Unicode...
เราไม่ได้รับอนุญาตให้ใช้ UTF8 ในเว็บแอปพลิเคชันหรือไม่
ในบทความนี้ Sandals จะพยายามแนะนำการเขียนโปรแกรม PHP ภายใต้การเข้ารหัส UTF8 ในหลาย ๆ ด้านให้ได้มากที่สุด...
ส่วนสาเหตุที่นำ "ภาษาจีน" มาใช้แยกกันนั้น...
ประการแรก เป็นเพราะไม่จำเป็นต้องพิจารณา UTF8 จริงๆ เมื่อพูดถึงภาษาอังกฤษ...
เว้นแต่ว่าคุณกำลังวางแผนที่จะสร้างระบบหลายภาษา...
(อยากจะบ่นบ้างว่าฝรั่งสมัยนี้ไม่ค่อยสนใจเรื่องนี้เลยตอนเขียนโปรแกรม...)
ประการที่สอง วิธีการประมวลผลของภาษาแบบหลายไบต์ เช่น จีน ญี่ปุ่น และเกาหลี ภายใต้การเข้ารหัส UTF8 นั้นจริงๆ แล้วคล้ายกันมาก...
แค่ตามตำลึงแล้วตักสกู๊ป...
เอาล่ะ... มาเริ่มกันที่ส่วนการประมวลผลฐานข้อมูลกันดีกว่า...
-
การเชื่อมต่อกับฐานข้อมูล
หลายๆ คนจะพบว่าข้อมูลเละเทะเมื่ออัพเกรดเป็น Mysql 4.1...
จริงๆ แล้วเป็นเพราะ Mysql รองรับชุดอักขระตั้งแต่ 4.1...
และชุดอักขระเริ่มต้นคือ UTF8...
(หลักฐานครบถ้วนถึงความสำคัญของบูรณาการกับมาตรฐานสากล...อิอิ...)
เมื่อก่อนเราใช้การเข้ารหัสแบบ utf8 หรือ GBK เป็นหลัก...
แน่นอนว่าข้อมูลที่ส่งออกนั้นอ่านไม่ออก...
เพื่อแก้รหัสที่อ่านไม่ออก...
คุณต้องแจ้งให้โปรแกรมทราบว่าจะได้รับข้อมูลการเข้ารหัสใดบ้าง...
เราถือว่าฐานข้อมูลก่อนหน้าของคุณมีการเข้ารหัส utf8...
mysql_query('SET CHARACTER SET utf8') หรือ die("Query failed : " . mysql_error());
ก่อนการสืบค้น
แน่นอน เนื่องจากสิ่งนี้จำเป็นสำหรับ 4.1 ขึ้นไปเท่านั้น
ดังนั้นเราจึงสามารถเพิ่มการตัดสิน:
$mysqlversion = $db->query_first("SELECT VERSION() AS version");
ถ้า ($mysqlversion['version'] >= '4.1')
-
mysql_query('SET CHARACTER SET utf8') or die("แบบสอบถามล้มเหลว : " . mysql_error());
-
ด้วยวิธีนี้ ไม่ว่า Mysql จะเป็น default การเข้ารหัสอะไรก็ตาม คุณก็สามารถเข้าถึงได้ตามปกติ...
(ไม่สำคัญว่าคุณจะฝากในช่วงระยะเวลารอด ฝากตามระยะเวลาที่กำหนด หรือแม้แต่ถอนออกในจำนวนเล็กน้อย...)
อย่างไรก็ตาม ทุกคนเป็นสากล...
คุณยังใช้ utf8 อยู่หรือเปล่า?
จะแปลงรหัสได้อย่างไร?
นอกจากนี้……
ฉันควรทำอย่างไรหากอักขระที่อ่านไม่ออกปรากฏขึ้นระหว่างการอัพเกรดข้อมูล
สลัด!
คราวหน้ามาฟังรายละเอียดกันต่อ…
========================================== === =
ข้อมูลจำเป็นต้องได้รับการอัปเกรดเป็น 4.1
...
ต้องส่งออกก่อน...
จะบอกว่าต่างชาติขาดความรับผิดชอบจริงๆ...
วิธีการส่งออกก่อนหน้านี้จะสูญเสียอักขระจีนบางตัวเสมอ...
เช่น เปลี่ยน "ฉันรักแม่" เป็น "ฉันรักแม่"...
(โดยปกติคำสุดท้ายของข้อมูลจะหายไป)
ทั้งหมดคือรุ่นหลัง...
(คำพูดของพี่ทับทิมที่ว่า "การกระทำที่กบฏเช่นนี้น่าตื่นเต้นจริงๆ"...)
เพื่อปกป้องหัวใจที่เปราะบางของคุณ...
นอกจากนี้เพื่อรักษาจริยธรรมและศีลธรรมแบบจีนโบราณ...
คุณสามารถเปลี่ยนฟิลด์ที่มีข้อมูลที่มีตัวอักษรจีนเป็นการเข้ารหัสไบนารี...
วิธีการเฉพาะ...
คุณสามารถเรียกใช้คำสั่งนี้ได้:
ALTER TABLE `table name` CONVERT TO CHARACTER SET binary;
ด้วยวิธีนี้ ฟิลด์ประเภทอักขระเหล่านั้น เช่น:
ถ่าน วาร์ชาร์ และข้อความ
จะถูกแปลงเป็น
ไบนารี VARBINARY และ BLOB
จากนั้นส่งออกและนำเข้าสู่สภาพแวดล้อม 4.1...
แน่นอนว่างานที่น่าเบื่ออย่างสุดท้ายคือ:
คุณต้องเปลี่ยนประเภทกลับ...
มีการอัพเกรดเป็น 4.1...
แน่นอนว่ายังมีการปรับลดรุ่นอีกด้วย...
จะดาวน์เกรดได้อย่างไร? - -
รองเท้าแตะไปเข้าห้องน้ำ...
และกรุณาเปิดหน้าต่อไป...
======================================== ==== ===
ข้อมูลถูกดาวน์เกรดจาก 4.1
บางคนพบว่าไฟล์ SQL ที่ส่งออกจาก 4.1 ไม่สามารถนำเข้าไปยังโปรแกรมเวอร์ชันต่ำกว่าได้...
จริงๆ แล้วปัญหานั้นง่ายมาก...
และ Mysql ก็คิดทุกอย่างให้เราแล้ว...
โปรดเพิ่มพารามิเตอร์ --เข้ากันได้ เมื่อส่งออก...
เราถือว่าฐานข้อมูลของคุณมีการเข้ารหัส utf8...
และเวอร์ชันฐานข้อมูลเป้าหมายคือ 4.0...
จากนั้นเขียนสิ่งนี้ลงในบรรทัดคำสั่ง:
shell>mysqldump --user=username --password=password --เข้ากันได้กับ=mysql40 --default-Character-set=utf8 Database > db.sql
ไฟล์ SQL ที่ส่งออกด้วยวิธีนี้สามารถนำเข้าสู่ฐานข้อมูลเวอร์ชันต่ำกว่าได้สำเร็จ...
ในที่สุดส่วนของฐานข้อมูลก็เสร็จสิ้น...
แต่เราควรใส่ใจกับการเขียนโปรแกรม PHP อย่างไร?
ต้องขอให้เปิดหน้าต่อไป...
http://www.knowsky.com
-
การเข้ารหัสไฟล์ PHP
ไฟล์ PHP ทั้งหมดจะต้องแปลงเป็นการเข้ารหัส UTF8 หรือไม่
รองเท้าแตะบอกคุณว่าไม่...
เอาแบบนี้...
หากไฟล์มีตัวอักษรจีนที่ต้องแสดง...
ควรแปลงเป็นการเข้ารหัส UTF8...
ขอยกตัวอย่าง:
// ฉันเป็นรองเท้าแตะ
เวลาสะท้อน ();
แม้ว่าโค้ดด้านบนจะมีโค้ด...
แต่เนื่องจากมีอยู่ในคำอธิบายประกอบ...
ไม่มีเอาท์พุต...
ดังนั้นหน้านี้จึงไม่จำเป็นต้องแปลงเป็นรูปแบบ UTF8...
อีกตัวอย่างหนึ่ง:
echo "I am Sandals";
เห็นได้ชัดว่ามีเอาต์พุตอักขระภาษาจีน ...
คุณควรแปลงเป็น UTF8...
แน่นอนว่าตอนนี้หลายโปรแกรมใช้เทคโนโลยีเทมเพลต (ชุดภาษา)...
คุณจะไม่เห็นอักขระใด ๆ สำหรับเอาต์พุตในโปรแกรม (ไฟล์แพ็คเกจที่ไม่ใช่ภาษา)...
ด้วยวิธีนี้ เราเพียงต้องแปลงไฟล์ชุดภาษาเป็นการเข้ารหัส UTF8 เท่านั้น...
(นี่คือข้อดีของชุดภาษาครับ... ฮ่าๆๆๆ...)
'http://www.knowsky.com
==================================================
การสกัดกั้นภาษาจีน UTF8
เนื่องจาก UTF8 ใช้สามไบต์ ...
ดังนั้นฟังก์ชัน substr แบบเดิมจึงไม่มีประโยชน์...
ผู้เชี่ยวชาญหลายคนได้เขียนฟังก์ชันการสกัดกั้นอักขระภาษาจีน UTF8...
ต่อไปนี้เป็นบางส่วน:
1. คำนวณก่อนแล้วจึงเอา
/**
* ผู้เขียน: Dummy |. Zandy
* อีเมล์: [email protected] |. hotmail.com
*สร้าง: 200512
* การใช้งาน: echo join('', String::subString_UTF8('ตัวอักษรจีน', 0, 1));
-
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
สตริงคลาส {
ฟังก์ชั่น subString_UTF8($str, $start, $lenth)
-
$เลน = strlen($str);
$r = อาร์เรย์();
$n = 0;
$ม = 0;
สำหรับ($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(อ๊อด($x), 10, 2);
$a = substr('00000000'.$a, -8);
ถ้า ($n < $เริ่มต้น){
ถ้า (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
-
$n++;
}อื่น{
ถ้า (substr($a, 0, 1) == 0) {
$r[] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[] = substr($str, $i, 3);
$i += 2;
}อื่น{
$r[] = '';
-
ถ้า (++$m >= $lenth){
หยุดพัก;
-
-
-
ส่งคืน $r;
} // สิ้นสุด subString_UTF8
}//สิ้นสุดสตริง
echo join('', String::subString_UTF8('ตัวอักษรจีน', 0, 1));
2. ฉันคิดว่าตัดรองเท้าแตะก่อนแล้วค่อยตัดออกก็ฉลาดมาก...
ใช้ฟังก์ชันการสกัดกั้นแบบดั้งเดิมเพื่อตัดทอนก่อน...
จากนั้นตรวจสอบว่ามีการแยกอักขระจีนตัวเดียวหรือไม่...
ถ้าเป็น...ก็จัดการเลย...
สิ่งสำคัญคือต้องทราบว่าพารามิเตอร์ที่สามของฟังก์ชัน substr ต้องมากกว่า 3...
ส่วนสาเหตุที่ไม่ใส่รองเท้าแตะช่วยอธิบายหน่อยได้ไหม?
// ฟังก์ชันตัดแต่งเพื่อลบอักขระตัวสุดท้ายของสตริง utf-8
// โดยทำตามคำแนะนำบน http://en.wikipedia.org/wiki/UTF-8
//โดทัน
// การใช้งาน: $str = utf8_trim(substr($str,0,50));
ฟังก์ชั่น utf8_trim($str) {
$เลน = strlen($str);
สำหรับ ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = อ๊อด($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));
if (($ch & 192)==192) return(substr($str,0,$i));
-
กลับ($str.$hex);
-
$str = 'อักษรจีน';
echo utf8_trim(ซับสเตร($str,0,3));
3. มีวิธีอื่นๆ
ตัวอย่างเช่น 007pig เป็นฟังก์ชันที่เขียนใน vBulletin เวอร์ชันภาษาจีน...
สั้นและหวาน...
ไม่สะดวกที่จะปล่อยซอร์สโค้ด...
ขอโทษนะเบิร์ด...
วันนี้ฉันจะจบการเขียนที่นี่...
นอกจากนี้ยังมีปัญหาเช่นการแปลงรหัสที่ยังไม่ได้เขียน...
ช่วงนี้งานยุ่ง...
จัดให้ต่อเมื่อมีเวลาว่าง...
http://www.quchao.com/?p=6&pp=1