Php 变量上的多个preg_替换

Php 变量上的多个preg_替换,php,preg-replace,Php,Preg Replace,对一个变量使用多个preg_替换和str_替换是否安全 $this->document->setDescription(tokenTruncate(str_replace(array("\r", "\n"), ' ', preg_replace( '/\s+/', ' ',preg_replace("/[^\w\d ]/ui", ' ', $custom_meta_description))),160)); 这是我用来删除换行符、空格和所有非字母数字字符(不包括unicode

对一个变量使用多个preg_替换和str_替换是否安全

$this->document->setDescription(tokenTruncate(str_replace(array("\r", "\n"), ' ', preg_replace( '/\s+/', ' ',preg_replace("/[^\w\d ]/ui", ' ', $custom_meta_description))),160));   
这是我用来删除换行符、空格和所有非字母数字字符(不包括unicode)的代码。最后一个preg_替换用于非字母数字字符,但点也被删除。有没有办法保留点,逗号,分隔符


谢谢

只需一句
preg\u replace
语句即可实现您的目标:

$str = preg_replace('#\P{Xwd}++#', '', $str);
$this->document->setDescription($desc, tokenTruncate($str, 160));
上面的
preg_replace()
语句将替换所提供字符串中任何非Unicode数字、字母或空格的内容


有关更多详细信息,请参阅。

可以在单个表达式中完成所需操作:

preg_replace('/(?:\s|[^\w.,-])+/u', ' ', $custom_meta_description);

它可以替换空格(制表符、换行符)或非单词、数字或标点符号。

Hmmm,te输出类似于“Topeak Sada dielensk”� 霍恩�" - � 应该是
\p{Xan}
不包含下划线
\uu
。最好使用
\p{Xwd}
。您能给出这样一个字符串及其预期输出的示例吗?