2013-11-28 3 views
-1

Мне нужно решение, которое удаляет все специальные символы, кроме буквенно-цифровых и акцентов. Я пробовал это решение без успеха.Удалить специальные символы в регулярном выражении PHP, которые позволяют акцентировать слова и китайский язык

preg_replace('/[^a-zA-ZáéíóúÁÉÍÓÚâêîôÂÊÎÔãõÃÕçÇ0-9_ \.&-]/s', '', $string); 

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

любая помощь его в самом деле позаботилась!

+0

http://www.php.net/manual/en/regexp.reference.unicode.php – CBroe

+2

Итак, что именно * являются * «специальными символами»? * «Удалить все, кроме нескольких избранных, и весь этот гигантский блок других персонажей, составляющих большинство Юникода» *, немного расплывчато. * Почему вам нужно удалить эти символы? – deceze

+0

Я создаю текстовое поле поиска, чем мне нужны чистые ключевые слова из «/% $ @ * и т. Д. ... –

ответ

5
$string = preg_replace('/\PL/u', '', $string); 
  • L является символом атрибута означает письмо
  • \P означает делает не матч атрибут
  • /u является модификатором Unicode, вам это нужно, если вы хотите обрабатывать символы Unicode
  • убедитесь $string кодируются в UTF-8

Так что это соответствует всем небуквым и удаляет их. Я могу только догадываться, что это соответствует тому, что вы хотите. См. http://www.php.net/manual/en/regexp.reference.unicode.php для получения дополнительных атрибутов, например. /[^\pL\pS]/u будет соответствовать всем, кроме букв и «символов».

+0

Если вам нужно поиграть с тем, что соответствует чему, см. Здесь: http://rubular.com/r/WcotUy4ju9. (Обратите внимание, что для этого механизма регулярного выражения вам нужно написать '\ p {L}' вместо '\ pL'.) – deceze

+0

отлично! спасибо и поздравляю! –

+0

, если мне нужно исключить пространство? –

0
echo preg_replace('/[^أ-يA-Za-z0-9 ]/ui', '', $string); 
+1

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