سؤال

لقد اختبرت للتو تطبيق الويب الخاص بي محليًا ، كل شيء يعمل بشكل جيد ، ولكن بعد التحميل على تطبيق الخادم يتصرف بشكل مختلف. يمكنني استخدام 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:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top