假设我有一个刺激是"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的那些。
问题是您以错误的方式指定不可破坏的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字符代码如何指定为两个单独的数字。