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

Grz*_*orz 11 php special-characters htmlspecialchars

假设我有一个刺痛,"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的那些.

Daw*_*žan 25

问题是您以错误的方式指定不可破坏的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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 请注意,`str_replace()` 也能正常工作,而且速度要快得多。 (2认同)
  • 我不知道我必须写 `\xc2\xa0` 并写了 `\xc2a0`...我的失败。谢谢你! (2认同)

Jeh*_*Ahn 9

清理所有类型的空白区域

preg_replace("/\s+/u", " ", $str);
Run Code Online (Sandbox Code Playgroud)

/sf/answers/2818529801/

仅供参考,PHP Sanitization filter_var()没有关于这些空白的过滤器。

  • 这绝对是最好的选择,应该是选定的答案。 (4认同)
  • 唯一对我有用的答案! (2认同)