PHP - Замена слов, проблема

Станислав
На сайте с 27.12.2009
Offline
237
639

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

Пишу функцию с массивом слов и на что их менять

function search_replace($str){

$tr = array(
"тест"=>"проверка"
);
return strtr($str,$tr);
}

В строке содержатся следующие слова

$str = 'тест,тестовый,тестировать';

В итоге получаю строку

$str = 'проверка,проверкаовый,проверкаировать';

понятно что заменяет все вхождения и даже там где не нужно.

можно как то от этого избавиться?

К запятой привязываться не получится, так как может быть к примеру такая замена

"на"=>"от"

получится опять же

заблокироваот

как быть, куда копать?

Мы там, где рады нас видеть.
IL
На сайте с 20.04.2007
Offline
435
#1
Ms-Dred:
можно как то от этого избавиться?

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

для замены по "полному" вхождению - использовать preg_replace..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Dweep
На сайте с 11.12.2006
Offline
207
#2


Foreach ($ar as $word=>$word2) {
$str = preg_replace('#(^|[\s,])'.$word.'[\s,]#', '$1'.$word2.'$2', $str);

}

Как то так..... Форум квадратные скобки заменил на какую то ересь.

Станислав
На сайте с 27.12.2009
Offline
237
#3

попробую сделать так

слова загнать в массив и обрамить их :слово:, потом уже менять

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий