المقدمة:
الصراحة،
تعتقد شركة Sandals أيضًا أن UTF8 أمر جيد ...
ففي نهاية المطاف، فإن عرض الصين واليابان وكوريا الجنوبية على نفس الشاشة أمر جذاب للغاية بالنسبة لشرق آسيا...
(طبعا الفوائد لا تقتصر على هذا...)
ليس فقط برامج الويب...
بدأت نواة العديد من التطبيقات في استخدام ترميز Unicode...
والغرض واضح: دعم العرض متعدد اللغات...
جميع برامج ميكروسوفت تعتمد على 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') أو die("فشل الاستعلام: " . mysql_error());
}
بهذه الطريقة، بغض النظر عن التشفير الافتراضي لـ Mysql، يمكنك الوصول إليه بشكل طبيعي...
(لا يهم إذا كنت تقوم بالإيداع خلال فترة البقاء، أو الإيداع لفترة محددة، أو حتى السحب بمبالغ صغيرة...)
ومع ذلك، الجميع دوليون...
هل مازلت تستخدم utf8؟
كيفية تحويل ذلك؟
بجانب……
ماذا علي أن أفعل إذا ظهرت أحرف مشوهة أثناء ترقية البيانات؟
سلطة!
دعونا نستمع إلى الشرح في المرة القادمة...
=========================== === =
يجب ترقية البيانات إلى 4.1
...
عليك تصديره أولاً..
القول بأن الأجانب غير مسؤولين حقًا ...
كانت طريقة التصدير السابقة تفقد دائمًا بعض الأحرف الصينية ...
على سبيل المثال، قم بتغيير "أنا أحب والدتك" إلى "أنا أحبك"...
(عادةً ما يتم فقدان الكلمة الأخيرة في جزء من البيانات)
الموضوع كله تخلف جيل..
(على حد تعبير الأخت رمان، "إن حقيقة مثل هذا العمل المتمرد مثيرة حقًا"...)
لتحمي قلبك الهش..
وأيضاً من أجل الحفاظ على الأخلاق والأخلاق الصينية التقليدية...
يمكنك تغيير الحقول التي تحتوي بياناتها على أحرف صينية إلى ترميز ثنائي...
الطريقة المحددة...
يمكنك تشغيل هذا البيان:
ALTER TABLE `اسم الجدول` CONVERT TO CHARACTER SET ثنائي؛
بهذه الطريقة، حقول نوع الأحرف مثل:
شار، فارتشار والنص
سيتم تحويلها إلى
ثنائي، VARBINARY وBLOB
ثم التصدير والاستيراد إلى بيئة 4.1...
وبطبيعة الحال، فإن المهمة الشاقة الأخيرة هي:
تحتاج إلى تغيير أنواعها مرة أخرى...
هناك ترقية إلى 4.1...
وبطبيعة الحال، هناك أيضا انخفاضات ...
كيفية خفض مستوى؟ ؟ ؟
صندل للذهاب إلى المرحاض...
ومن فضلك انتقل إلى الصفحة التالية...
======================== ==== ===
تم تخفيض البيانات من الإصدار 4.1.
وجد بعض الأشخاص أن ملفات SQL المصدرة من الإصدار 4.1 لا يمكن استيرادها إلى برامج ذات إصدار أقل...
المشكلة في الواقع بسيطة جداً..
وقد فكرت Mysql بالفعل في كل شيء بالنسبة لنا...
الرجاء إضافة المعلمة --compatible عند التصدير...
نحن نفترض أن قاعدة البيانات الخاصة بك مشفرة بـ utf8 ...
وإصدار قاعدة البيانات الهدف هو 4.0...
ثم اكتب هذا في سطر الأوامر:
Shell>mysqldump --user=username --password=password --compatible=mysql40 --default-character-set=utf8data > 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. احسب أولاً ثم خذ
/**
* المؤلف : الدمية |
* البريد الإلكتروني: [email protected] |
*إنشاء: 200512
* الاستخدام: echo join('', String::subString_UTF8('الأحرف الصينية', 0, 1));
*/
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
سلسلة الفئة {
الدالة subString_UTF8($str، $start، $lenth)
{
$len = strlen($str);
$r = المصفوفة();
$ن = 0;
$م = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr('00000000'.$a, -8);
إذا ($ن <$بداية){
إذا (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$ن++;
}آخر{
إذا (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[] = '';
}
إذا (++$م >= $lenth){
استراحة؛
}
}
}
إرجاع $r;
} // نهاية subString_UTF8
}//سلسلة النهاية
echo join('', String::subString_UTF8('الأحرف الصينية', 0, 1));
2. أعتقد أنه من الذكاء جدًا قص الصنادل أولاً ثم قصها...
استخدم وظيفة الاعتراض التقليدية للاقتطاع أولاً...
ثم حدد ما إذا كان سيتم تقسيم حرف صيني واحد...
إذا كان كذلك...فتعامل معه...
من المهم ملاحظة أن المعلمة الثالثة للدالة الفرعية يجب أن تكون أكبر من 3...
أما لماذا لا تستخدمين الصنادل، هل يمكنك توضيح ذلك؟
// دالة القطع لإزالة الحرف الأخير من سلسلة utf-8
// باتباع التعليمات الموجودة على http://en.wikipedia.org/wiki/UTF-8
// دوتان
// الاستخدام: $str = utf8_trim(substr($str,0,50));
الدالة utf8_trim($str) {
$len = strlen($str);
لـ ($i=strlen($str)-1; $i>=0; $i-=1){
$hex .= ' '.ord($str[$i]);
$ch = ord($str[$i]);
if (($ch & 128)==0) return(substr($str,0,$i));
if (($ch & 192)==192) return(substr($str,0,$i));
}
return($str.$hex);
}
$str = 'الأحرف الصينية';
صدى utf8_trim(substr($str,0,3));
3. هناك طرق أخرى،
على سبيل المثال، 007pig هي دالة مكتوبة في النسخة الصينية من vBulletin الخاص بنا...
قصيرة وحلوة ...
من غير الملائم إصدار الكود المصدري...
آسف يا بيرد...
سأنهي كتابتي هنا اليوم...
هناك أيضًا مشكلات مثل تحويل الشفرة التي لم تتم كتابتها ...
مشغول في الآونة الأخيرة...
استمر في التنظيم عندما يكون لديك وقت...
http://www.quchao.com/?p=6&pp=1