charset مختلف على خادم مختلف؟
-
21-09-2019 - |
سؤال
لقد اختبرت للتو تطبيق الويب الخاص بي محليًا ، كل شيء يعمل بشكل جيد ، ولكن بعد التحميل على تطبيق الخادم يتصرف بشكل مختلف. يمكنني استخدام Function formatiraj_string_url لتحويل الرموز المشتركة والحصول على عنوان URL نظيف ... محليًا يعمل بشكل جيد ولكن على الخادم لا تقوم هذه الوظيفة بتحويلها بنفس الطريقة.
قبل أيام قليلة اختبرت هذا على خادم ثالث وعمل بشكل جيد. الآن أقوم بتحميل الويب لاختباره مرة أخرى على هذا الخادم الثالث ، لكنني أتساءل فقط ما الذي يمكن أن يكون سبب هذا السلوك؟
function formatiraj_string_url($string)
{
$string = strtolower($string);
$znak[0] = ' ';
$znak[1] = 'Š';
$znak[2] = 'š';
$znak[3] = 'Đ';
$znak[4] = 'đ';
$znak[5] = 'Č';
$znak[6] = 'č';
$znak[7] = 'Ć';
$znak[8] = 'ć';
$znak[9] = 'Ž';
$znak[10] = 'ž';
$znak[11] = 'Š';
$znak[12] = 'Đ';
$znak[13] = 'Č';
$znak[14] = 'Ć';
$znak[15] = 'Ž';
$znak[16] = 'š';
$znak[17] = 'đ';
$znak[18] = 'č';
$znak[19] = 'ć';
$znak[20] = 'ž';
$znak[21] = 'Š'; // Š
$znak[22] = 'š'; // š
$zamjena[0] = '-';
$zamjena[1] = 's';
$zamjena[2] = 's';
$zamjena[3] = 'd';
$zamjena[4] = 'd';
$zamjena[5] = 'c';
$zamjena[6] = 'c';
$zamjena[7] = 'c';
$zamjena[8] = 'c';
$zamjena[9] = 'z';
$zamjena[10] = 'z';
$zamjena[11] = 's';
$zamjena[12] = 'd';
$zamjena[13] = 'c';
$zamjena[14] = 'c';
$zamjena[15] = 'z';
$zamjena[16] = 's';
$zamjena[17] = 'd';
$zamjena[18] = 'c';
$zamjena[19] = 'c';
$zamjena[20] = 'z';
$zamjena[21] = 's';
$zamjena[22] = 's';
$string = str_replace($znak, $zamjena, $string);
$new_string = preg_replace("/[^a-zA-Z0-9-s]/", "", $string);
return $new_string;
}
تحرير: قبل str_replace ، تستخدم هذه الوظيفة preg_replace. على الخادم كان هذا الخطأ أظهر:
Warning: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 0 in /home2/sinjcom/public_html/sinj.com.hr/administracija/include/funkcije.php on line 200
لكن محليًا ، لم يكن لدي هذه المشكلة
المحلول
في أي Charset مكتوب ملفك؟
نظرًا لأنك كتبت الأحرف التي ترغب في استبدالها مباشرةً في الكود الخاص بك ، كقواسل ، يتم تشفيرها في أي شيء يستخدمه الملف. إذا كان هذا Charset يختلف عما تحصل عليه من المتصفح ، فلن تعمل وظائفك.
النقطة المهمة التي تحتاج إلى وضعها في الاعتبار ، هي تتبع دائمًا ما يتم تشفير الأوتار الخاصة بك ، وتحويلها عندما تكون ضرورية.
ألق نظرة على Kore Nordmanns الأسئلة الشائعة حول charsets في PHP لبعض المؤشرات الأخرى حول charsets.
نصائح أخرى
أوصيك بالاعتماد على الكود الحالي الذي تم اختباره للغاية للقيام بذلك. أعتقد أن كل هذه الوظائف تفترض إدخال UTF-8 والإخراج 7 بت ASCII:
remove_accents()
من WordPress- دروبال حرفي الوحدة النمطية (سوف تتطلب القليل من العمل لإلغاء ذلك من دروبال)
utf8_to_ascii()
من الموقر PHP UTF8 مشروعfriendly_url()
بقلم جاكوب فاراDoctrine_Inflector::urlize()
slugify()
تبدو صلبة