php preg_replace - 保留指定的字符+外语字母

时间:2013-09-12 10:55:04

标签: php unicode preg-replace

我需要一个从字符串中删除所有字符(未在模式中列出)但保留外语字母​​的函数。我知道preg_replace有\ p“模式”,但由于某些原因我无法使它工作。

我使用此函数从字符串中删除所有垃圾:

$main_content=preg_replace("/[^a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these

简单地说,该功能应该保留所有标准字母/数字和标准符号,如+ - !@#$等,并删除所有废话,如©™等。如果有更好的方法来编写这样的preg_replace,请告诉我。

现在,我希望函数保留外语字母​​,所以我将其修改为

$main_content=preg_replace("/[^\p{L}a-zA-Z0-9`~!@#\$%\^&\*\(\)-_=\+\\|\,<\.>\/\?;:'\"\[\]\s]/", "", $main_content); //remove all symbols that do NOT match these

(你会注意到\ p {L}已添加)。不幸的是,它没有按预期工作。当我回复文本时,我看到外语没有被删除(这很好)但是它们被转换成 (这很糟糕)。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

\ p {L}仅适用于u修饰符:

$main_content=preg_replace("/[^\p{L}]/u", "", $main_content);

注意你在/

之后添加了