Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с рег. выражением на хостинге.
 
 автор: AlexK_   (09.01.2008 в 17:51)   письмо автору
 
 

Есть такая проблема.
Есть функция транслитерации, на локалхосте (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);

   
 
 автор: ddhvvn   (09.01.2008 в 18:10)   письмо автору
 
   для: AlexK_   (09.01.2008 в 17:51)
 

Что-то у Вас какие-то "интересные" ограничители. Я в виде фигурных скобок еще не видел.

Может так:

$string = preg_replace('|[^\w ]|s', '', $string); 
$string = preg_replace('|[ ]+|', ' ', $string); 

?

   
 
 автор: kasmanaft   (09.01.2008 в 20:24)   письмо автору
 
   для: ddhvvn   (09.01.2008 в 18:10)
 

Ограничители нормальные :)
Дело скорее всего в неправильно настроенной локали и, соответственно - \w.
То есть можно попробовать настроить локаль (см. setlocale()), а можно попробовать эту \w заменить на "a-zA-Zа-яА-ЯёЁ0-9" (убрать лишнее, если есть).

   
 
 автор: SHAman   (09.01.2008 в 22:37)   письмо автору
 
   для: kasmanaft   (09.01.2008 в 20:24)
 

К слову, но не к месту скажу, что часто такие проблемы возникают из-за разных разделителей строк в виндовсе и линухах. И начинают рушиться фразы типа:


preg_replace("/\n/", "", $text);


Потому что \n удаляется, а \r остается.

Еще раз повторю, что в данном конкретном случае, похоже, дело не в этом. Просто мало-ли, пригодится.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования