Вопрос

Я только что протестировал локально свое веб-приложение, все работает нормально, но после загрузки на сервер приложение ведет себя по-другому.Я использую функцию formatiraj_string_url для преобразования диакритических символов и получения чистого URL...локально это работает нормально, но на сервере эта функция не преобразует их таким же образом.

Несколькими днями ранее я протестировал это на каком-то третьем сервере, и это сработало нормально.Сейчас я загружаю web, чтобы снова протестировать его на этом третьем сервере, но мне просто интересно, что на самом деле может быть причиной такого поведения?

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

Но локально у меня не было такой проблемы

Это было полезно?

Решение

В какой кодировке записан ваш файл?

Поскольку вы записали символы, которые хотели бы заменить, непосредственно в свой код в виде строк, они кодируются в любой кодировке, используемой файлом.Если эта кодировка отличается от той, которую вы получаете из браузера, ваши функции не будут работать.

Важный момент, который вам нужно иметь в виду, - это всегда отслеживать кодировку, в которой закодированы ваши строки, и преобразовывать при необходимости.

Взгляните на Коре Нордманнс Часто задаваемые вопросы о кодировках в PHP еще несколько советов о кодировках.

Другие советы

Я рекомендую вам для этого положиться на существующий, хорошо протестированный код.Я полагаю, что все эти функции предполагают ввод UTF-8 и вывод 7-битного ASCII:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top