|
|
|
| Есть такая проблема.
Есть функция транслитерации, на локалхосте (apache 1.3, php 4)
все работает нормально, но когда перенес на хостинг стала
выдавать пустые строки.
Эксперементальным путем выяснил, что проблема в строчках
с рег. выражениями.
Могли бы вы подсказать в чем тут может быть дело?
Код функции:
function translit($string) {
// переводим в нижний регистр
$string = strtolower($string);
// удаляем лишние символы
$string = preg_replace('{[^\w ]}s', '', $string);
$string = preg_replace('{[ ]+}', ' ', $string);
// делаем транслит
$string = strtr($string,
"абвгдежзийклмнопрстуфыэє?ї",
"abvgdegziyklmnoprstufieeii"
);
$string = strtr($string, array(
'ё'=>"yo", 'х'=>"h", 'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh",
'щ'=>"shch", 'ъ'=>'', 'ь'=>'', 'ю'=>"yu", 'я'=>"ya",
));
$explode = explode(' ', $string);
$string = implode('_', $explode);
return $string;
}
|
"Проблемный" участок:
// удаляем лишние символы
$string = preg_replace('{[^\w ]}s', '', $string);
$string = preg_replace('{[ ]+}', ' ', $string);
|
| |
|
|
|
|
|
|
|
для: AlexK_
(09.01.2008 в 17:51)
| | Что-то у Вас какие-то "интересные" ограничители. Я в виде фигурных скобок еще не видел.
Может так:
$string = preg_replace('|[^\w ]|s', '', $string);
$string = preg_replace('|[ ]+|', ' ', $string);
|
? | |
|
|
|
|
|
|
|
для: ddhvvn
(09.01.2008 в 18:10)
| | Ограничители нормальные :)
Дело скорее всего в неправильно настроенной локали и, соответственно - \w.
То есть можно попробовать настроить локаль (см. setlocale()), а можно попробовать эту \w заменить на "a-zA-Zа-яА-ЯёЁ0-9" (убрать лишнее, если есть). | |
|
|
|
|
|
|
|
для: kasmanaft
(09.01.2008 в 20:24)
| | К слову, но не к месту скажу, что часто такие проблемы возникают из-за разных разделителей строк в виндовсе и линухах. И начинают рушиться фразы типа:
preg_replace("/\n/", "", $text);
|
Потому что \n удаляется, а \r остается.
Еще раз повторю, что в данном конкретном случае, похоже, дело не в этом. Просто мало-ли, пригодится. | |
|
|
|