我試圖找到檢查一個字符串是否包含任何「怪異」的UTF-8字符的最佳方法。正則表達式來檢查一個字符串是否包含字母或數字
基本上我正在尋找的東西,可以防止所有可以隱藏在一個字符串中的所有不同的UTF 8控制符號非空白空間。當我說隱藏時,我暗示,在屏幕上打印字符串將不會顯示這些字符。他們要麼是空格,要麼是空白字符。
我解決這個以前的方法是返回true如果字符串的字符中的一個:
function isUnusualString($string) {
if($string == "")
return TRUE;
$char = ord($string);
if($char < 33)
return TRUE;
if($char > 8191 && $char < 8208)
return TRUE;
if($char > 8231 && $char < 8240)
return TRUE;
switch($char) {
case 160: // Non-Breaking Space
case 8287: // Medium Mathematical Space
return TRUE;
break;
}
return FALSE;
}
然而,這沒有捕捉到所有的情況下,我不知道爲什麼。我假設你可以有一些長度超過1或長度爲0的字符。
接下來我嘗試迭代字符串的字符並檢查字符串是否包含任何「隱藏」字符。
例如運行下面的代碼:
function isUnusualUTF($string) {
if($string == "")
return TRUE;
$strlen = strlen($string);
for ($i = 0; $i < $strlen; ++$i) {
$char = ord($string[$i]);
if($char < 33)
echo "char = ".$char." at index: ".$i." is < 33";
if($char > 8191 && $char < 8208)
echo "char = ".$char." at index: ".$i." is >8191 and < 8240 ";
if($char > 8231 && $char < 8240)
echo "char = ".$char." at index: ".$i." is > 8231 and < 8240 ";
switch($char) {
case 160: // Non-Breaking Space
case 8287: // Medium Mathematical Space
echo "cases<br>"; //return TRUE;
break;
}
}
return FALSE;
}
$string = "Unicode ";
echo isUnusualUTF($string);
輸出:
char = 32 at index: 7 is < 33
我認爲要做到這一點,最好的辦法是與做一個正則表達式:
if string has (numbers or letters or " " or other symbols
that can be printed and seen in the screen)
return true
else
return false
謝謝
您是否嘗試過通過人物的循環? –
只允許ASCII字符工作嗎? – Mike
@DaveChen我剛剛編輯的帖子,包括我的第二種方法。 –