如何替换已解码的不可破坏空间(nbsp)

问题描述 投票:10回答:1

假设我有一个刺激是"a s d d"htmlentities变成了 "a s d d"

如何替换(使用preg_replace)而不将其编码为实体?

我试过preg_replace('/[\xa0]/', '', $string);,但它不起作用。我正试图从我的字符串中删除那些特殊字符,因为我不需要它们

regexp之外的可能性有哪些?

编辑我要解析的字符串:http://pastebin.com/raw/7eNT9sZr 功能preg_replace('/[\r\n]+/', "[##]", $text) 以后的implode("</p><p>", explode("[##]", $text))

我的问题并不完全是“如何”这样做(因为我可以编码实体,删除我不需要的实体和解码实体)。但是如何删除只有str_replace或preg_replace的那些。

php special-characters htmlspecialchars
1个回答
21
投票

问题是您以错误的方式指定不可破坏的UTF-8空间。正确的代码是0xc2a0,你只指定字符代码的一半。

您可以使用简单(快速)str_replace或使用更灵活的正则表达式替换它,具体取决于您的需要:

// faster solution
$regular_spaces = str_replace("\xc2\xa0", ' ', $original_string);

// more flexible solution
$regular_spaces = preg_replace('/\xc2\xa0/', ' ', $original_string);

请注意,对于str_replace,您必须使用双引号(")来包含搜索字符串,因为它不了解原始字符代码,因此需要先将这些代码转换为实际字符。这是由PHP自动生成的,因为正在处理用引号括起的字符串,并且在使用字符串值之前替换特殊序列(例如换行字符\n,字符代码等)。

相比之下,preg_replace函数本身可以理解原始字符代码,因此您不需要PHP将代码转换为实际字符,您可以使用撇号(单引号,')来封装搜索字符串。

请注意UTF-8字符代码如何指定为两个单独的数字。

© www.soinside.com 2019 - 2024. All rights reserved.