2010-08-05 68 views
14

我想禁止某些UTF-8輸入(服務器端),例如東方語言,其中示例輸入可能是「伊」。如何檢測非西方字符?

但是,我確實想繼續支持其他拉丁字母或「拉丁式」字符,如威爾士語ŵ和ŷ,所以checking against latin-1 is not possible

我有什麼選擇? (如果語言特定,PHP首選)

非常感謝。


推理:對於很多非西方字符瀏覽器的支持往往是丟失(例如,在不同的瀏覽器我只是看到上面的問題一箱),所以對於像顯示名稱有時是適當限制它即使它不適合消息體

+2

你介意我問你爲什麼不希望允許在一個國際化的網站一些語言? – Borealid 2010-08-05 03:45:59

+0

公平的問題。這隻需要一個表的一個字段;網站的其餘部分將支持它。 – HoboBen 2010-08-05 03:56:43

+2

那麼你允許的字符的子集是什麼?它是否適合現有的字符集?如果是這樣,你可以''iconv'字符串到目標編碼,丟棄所有無效字符。 – deceze 2010-08-05 04:00:12

回答

30

只是做

preg_match('/[^\\p{Common}\\p{Latin}]/u', $string) 

其中$string是UTF-8字符串。如果有非拉丁字符,則返回「1」,否則返回「0」。

例子:

var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷaás??')); //int(0) 
var_dump(preg_match('/[^\\p{Common}\\p{Latin}]/u', 'sf..ŷݤaás??')); //int(1) 
+0

看起來很有用! +1 – alex 2010-08-05 03:50:50

+0

非常好,謝謝訴! – HoboBen 2010-08-05 04:00:11

+0

是否有任何地方的命名子模式的列表? – HoboBen 2010-08-05 04:01:51