2014-03-01 37 views
0

对变量使用多个preg_replace和str_replace是安全的吗?变量上有多个preg_replace

$this->document->setDescription(tokenTruncate(str_replace(array("\r", "\n"), ' ', preg_replace('/\s+/', ' ',preg_replace("/[^\w\d ]/ui", ' ', $custom_meta_description))),160)); 

这是我使用以除去换行符,空格和(不包括Unicode)的所有非字母数字字符的代码。最后一个preg_replace用于非字母数字字符,但点也被删除。有没有办法保留点,逗号, - 分隔符?

谢谢!

+0

你可以举一个这样的字符串及其预期输出的例子吗? –

回答

1

你想要什么可以在一个单一的表达来完成:

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

它取代或者空格(制表符,换行符为好)或东西是不是字状,数字或标点符号。

+0

'\ d'已经在'\ w'中。 – Toto

+0

@ M42是的,你说得对:)感谢你的支持! –

1

你想要做什么可以用一个preg_replace语句来实现:

$str = preg_replace('#\P{Xwd}++#', '', $str); 
$this->document->setDescription($desc, tokenTruncate($str, 160)); 

以上preg_replace()声明将取代任何东西,这不是从所提供的字符串一个Unicode数字,字母或空白。

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

+0

嗯,产量是这样的“Topeak Sadadielensk hon ” - 应该是 – Adrian

+0

@Adrian:你可以粘贴你的整个代码在http://eval.in? –

+0

'\ p {Xan}'不包含下划线'_'。最好使用'\ p {Xwd}'。 – Toto