2011-06-30 108 views
-2

可能重複:
preg_match php special characters檢查特殊字符

由於我的註冊系統,我需要檢查的特殊字符的存在在一個變量的一部分。我怎樣才能執行此檢查?給出最準確答案的人最好。

+1

如果你想要脂肪酶幫助你,請接受你的問題。 – Balanivash

+0

「特殊字符」的定義有待解釋。你能定義「特殊字符」的含義嗎?或者,如果該列表較短,您可能不認爲哪些字符是「特殊字符」? –

+0

你的意思是「給出最準確答案的人最好」。這是一個社區,而不是比賽。 – Balanivash

回答

0
$special_chars = // all the special characters you want to check for 
$string = // the string you want to check for 

if (preg_match('/'.$special_chars.'/', $string)) 
{ 
// special characters exist in the string. 
} 

檢查的preg_match更多細節

手動
+0

啊是啊,如果你想檢查存在而不是逃避特殊字符,這是要走的路 – Jasper

0

快速谷歌搜索「PHP的特殊字符」帶來了一些好消息:

htmlentities() - http://php.net/manual/en/function.htmlentities.php 

htmlspecialchars() - http://php.net/manual/en/function.htmlspecialchars.php 
+1

我認爲你需要閱讀這些手冊用於將所有字符轉換爲HTML實體,並且不檢查是否存在特殊字符 – Balanivash

+0

檢出我對您的文章的評論 – Jasper

1

假設你的意思是HTML實體,當你說「特殊字符」,你可以使用這個:

<?php 
$table = get_html_translation_table(HTML_ENTITIES, ENT_COMPAT, 'UTF-8'); 
$chars = implode('', array_keys($table)); 

if (preg_match("/[{$chars}]+/", $string) === 1) { 
    // special chars in string 
} 

get_html_translation_table獲取所有可能的html實體。如果您只想要功能htmlspecialchars轉換的實體,則可以傳遞HTML_SPECIALCHARS而不是HTML_ENTITIESget_html_translation_table的返回值是一個(html實體,轉義實體)對的數組。

接下來,我們希望將所有的html實體放在一個正則表達式中,如[&"']+,它將匹配包含長度爲1或更多的方括號內的字符之一的任何子字符串。因此,我們使用array_keys來獲取翻譯表(未編碼的html實體)的關鍵字,並將它們拼合成單個字符串。

然後,我們把它們放入正則表達式中,並使用preg_match來查看字符串是否包含任何這些字符。您可以在PHP文檔中閱讀關於regular expression syntax的更多信息。