Bir çok dil dize beyaz listeye karakter ama tüm filtre regex

2 Cevap php

Ben temizleme bir çok-dilli sitede arama kutusuna gelen bir dize çalışıyorum.

Normalde ben böyle bir regex kullanmak:

$allowed = "-+?!,.;:\w\s";
$txt_search = preg_replace("/[^" . $allowed . "]?(.*?)[^" . $allowed . "]?/iu", "$1", $_GET['txt_search']);

ve İngilizce metinler için çalışıyor.

Girilen metinleri herhangi bir dilde olabilir Ancak, şimdi ben aynı şeyi yapması gerekir (şimdi Rusya, gelecekte Çin).

Orijinal dilinde "normal metinleri" koruyarak nasıl dize kadar temiz olabilir?

Olsa bir kara geçiş hakkında ben ama şu anda regex sadece tamamen tüm orijinal girişi yok (ben ... tercih ederim rağmen).

2 Cevap

Gördüğünüz http://www.php.net/manual/en/regexp.reference.unicode.php, \p{LN} [\p{L}\p{N}] yerine \ w kullanabilirsiniz

Bu rusça harfler desen \ w ile tanınan değil, yaygın bir sorundur, bu nedenle kullanabilirsiniz

$ Izin = "+, -;:?!. \ W \ sа-я";