2013-09-26 4 views
0

Моей программы использует следующий перед выполнением поиска в базе данных MySql:как предотвратить preg_replace в PHP от зачистки некоторых специальных символов

$keywords_search = preg_replace("/[^a-zA-Z0-9 ]/", "", $keywords_search); 

Проблема заключается в том, что это зачистки слова, которые пользователи могут использовать на других языках , как «españa» (испанский) из-за «-с» характера, который очень распространен.

Есть ли способ разрешить определенные специальные символы в preg_replace?

+0

http://www.regular-expressions.info/unicode.html –

ответ

0

Если вы хотите, чтобы убедиться, что ваше ключевое слово не содержит какой-либо вредоносный код, это не путь, вы должны прочитать:

How can I prevent sql injection in php

Если вы просто хотите, чтобы отфильтровать результаты поиска фразу, вы можете использовать шаблон \p{L} для соответствия любой букве и \p{N} многим символам. Кроме того, вы должны использовать u модификатор как это: /\p{L}+/u

Также не забудьте проверить этот вопрос:

Regular expression \p{L} and \p{N}

0

Вы можете попробовать с этим одним

$keywords_search = preg_replace("/[^\w-\p{L}\p{N}\p{Pd}]/", "", $keywords_search); 

Это будет соответствовать все, что это не буквенно-цифровой символ (включая буквы UTF-8), а также тире (-).

+0

штрих включен в '\ p {Pd}' (не уверен в подчеркивании), а '\ w' включен в' [\ pL \ PN ] 'поэтому он становится:' [^ \ pL \ pN \ p {Pd} _] ' – Toto

Смежные вопросы