2009-10-12 5 views
2

Я только что проверил локально мое веб-приложение, все работает нормально, но после загрузки на серверное поведение ведет себя по-другому. Я использую функцию 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; 
    } 

EDIT: перед 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 

Но на местном уровне, у меня не было этой проблемы

ответ

2

Какой набор символов записывается файл в?

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

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

Посмотрите на Kore Nordmanns FAQ about charsets in PHP еще несколько указателей о кодировке.

+0

Благодарим вас за ответ! –

3

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

Смежные вопросы