2013-10-24 2 views
0

Некоторое время искал, но поскольку я не понимаю параметры предварительной замены, которые могут быть введены, я не могу решить свою проблему, просмотрев похожие вопросы. (поэтому я хотел бы попросить вас объяснить каждый знак в вашем ответе?)preg_replace все, кроме буквенно-цифровых и акцентов

Я хочу отфильтровать строку и заменить все, что не является буквенно-цифровым или акцентом с пробелом. (После этого я использую preg_split, чтобы составить список из них).

Здесь символы, которые я называю акцентами, показаны только в нижнем регистре, но также хотят сохранить варианты в верхнем регистре (возможно, забыли несколько). Мне действительно нужны левые знаки. Данное право не является обязательным:

é è ë ï ê    ç ü ö ä ú ó á ã õ ñ å û â ô 

Мне нужно это, потому что я должен искать в своей базе данных (подготовленные заявления) для этого.

В настоящее время я использую:

$terms=preg_split('/\s+/', preg_replace('/[^a-zA-Z0-9À-ÿ]+/', ' ', $_GET['ter'])); 

Но следующий пример показывает, что он не оставляет знаки, как они:

url example: mydomain.com/index.php?ter=léopold 

$terms=preg_split('/\s+/', preg_replace('/[^a-zA-Z0-9À-ÿ]+/', ' ', $_GET['ter'])); 
foreach ($erms as $term){echo " term: ".$term;} 


Outputs: 
term: l� term: opold 

What i want it to be: 
term: léopold 

Поэтому мне нужно создать preg_replace, который не вредит акценты, особенно те, которые написаны слева в первом кодовом блоке

ответ

1

Используйте mb_ereg_replace, preg_replace с поддержкой многобайтовых

+0

Это сработало. Thx, но зачем нужна поддержка многобайтов? – Pepe

+0

из-за акцентов –