2010-11-02 2 views
1

Я хочу разрешить A-Z, a-z и японский кандзи, хирагану и катакана и ничего больше. До сих пор я придумал это:Regex filtering Japanese

$pattern = '/[^\w\x{3041}-\x{3094}\x{30A1}-\x{30fA}\x{30fC}\x{4E00}-\x{9FFF}_\-]+/u'; 
preg_replace($pattern, '', $string); 

Я не уверен, если это форма регулярных выражений является PHP специфичны. Я принимаю строку в URL-адресе и хочу отфильтровать кавычки и другие «опасные» символы. Нечетная вещь в вышеупомянутой «схеме» заключается в том, что с «d» или без нее цифры не совпадают.

Так следующий делает то же самое:

$pattern = '/[^\d\w\x{3041}-\x{3094}\x{30A1}-\x{30fA}\x{30fC}\x{4E00}-\x{9FFF}_\-]+/u'; 

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

+0

Это может быть проще в черный список опасных символов и искать их вместо этого. – Thilo

+0

Я понятия не имею, какие персонажи могут быть опасны. Любая информация об этом? Я использую эту строку в предложении MySQL where. Таким образом, на самом деле это необходимо для 100% дезинфекции. –

+0

Возможно ли использовать вместо этого подготовленный (например, [mysqli] (http://php.net/manual/en/class.mysqli-stmt.php))? Это будет, как правило, безопаснее. –

ответ

1

\w содержит цифры; это эквивалентно [A-Za-z0-9_]. Так в любом случае вы разрешаете им.

+0

Значит, «d» - [0-9], а «w» - [A-Za-z0-9_]? –

+0

@sims, это правильно. Вы можете найти этот [список классов символов] (http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes) полезным. –

+0

Я использовал http://www.regular-expressions.info/reference.html Очевидно, что это не ясно. Спасибо за это разъяснение! –

3

В Unicode,

x3040-x308f: хирагана включая несколько старых символов. x30a1-x30ff: Катакана. включая несколько символов.

Однако для набора символов CJK назначаются x4e00-x9eff. Не японский.

CJK означает Китай, Японию и Корею.

Вы можете описать область символов CJK по unicode. Однако вы не можете описать японскую область Канджи юникодом. Потому что в области кода CJK китайские кандзи и японские кандзи смешиваются. Не полностью разделены. Китайские и японские кандзи разделяют некоторые символы. Но большинство символов отличается от собственной эволюции каждой стороны.

См. Следующий сайт. Это довольно тяжело. И ваш компьютер должен иметь достаточно шрифтов, чтобы прочитать его. http://www.tamasoft.co.jp/en/general-info/unicode.html

+0

Спасибо за информацию об этом. Я был особенно обеспокоен тем, что я фильтровал правильные символы. –