删除字符串中的非字母数字字符

时间:2016-06-17 04:37:11

标签: php regex

我尝试使用以下两行:

preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);

但是,如果$string有一个引号,则会被"039"替换,我不明白为什么:

  

变为

  

don039t

3 个答案:

答案 0 :(得分:2)

In do not使用'代替单引号。在html视图中,它显示为单个代码。替换(preg_replace)时,空格字符将被删除, 039 (来自')仅保留。

答案 1 :(得分:2)

如前所述,您的字符串使用htmlentities进行编码。

尝试:

preg_replace("/[^A-Za-z0-9 ]/", '', html_entity_decode($string, ENT_QUOTES));

请参阅this example

指定ENT_QUOTES以使其处理引号。

如果您仍在寻找删除字符的方法,而无需解码实体,则可以尝试

preg_replace("/[^a-z0-9& ]|&(#[0-9]{2,3})?/i", '', $string);

答案 2 :(得分:0)

尝试:

$exampleString = "Hi! Jo libertaire. This is working fine \"Yes absolutely fine\".Don't say its not working. you can try this string. :)";
$result= preg_replace("/[^A-Za-z0-9 ]/", '', $exampleString);   
print $result;

我没有php的服务器,所以我在在线编辑器中尝试了这个,它工作正常。