2011-06-30 161 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的更多信息。