2016-11-24 2 views
-1

Я пытаюсь заменить некоторые акцентированные символы в php. Прежде всего, я использую preg_match, чтобы обнаружить этот вид (и он работает) символов, а затем preg_replace, чтобы заменить их на другой. В моем случае я пытаюсь заменить /[é]|[è]/ на 'e'.Как сделать preg_replace для акцентированных символов

if(preg_match('/[é]|[è]/',$adress)){ 
     preg_replace('/[é]|[è]/','e',$adress); 
} 

Так что любые альтернативы или другие решения.

+1

Вы забываете модификатор '/ u'. Просто используйте '$ adress = preg_replace ('/ [éè]/u', 'e', ​​$ addressress);' –

+0

он не работает. Пример: https://3v4l.org/8FshJ – KubiRoazhon

+0

Работает https://3v4l.org/0rMU4 –

ответ

0

В вашем коде переменная $adress передана preg_replaceпо значению. Линия

preg_replace('/[é]|[è]/','e',$adress); 

фактически заменяет символы в временная копия$adress переменной. Но результат не используется.

Если вы хотите изменить его, вы должны присвоить результат preg_replace к нему:

$adress = preg_replace('/[éè]/u', 'e', $adress); 

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

В качестве альтернативы используйте str_replace. Это не считается «многобайтовым», но на самом деле может быть использовано для таких замен:

$adress = str_replace(['é', 'è'], 'e', $adress); 

P.S .: считает переименование $adress в $address.