html_entity_decode也会替换吗?如果不是如何更换它?

时间:2011-06-08 07:16:49

标签: php html string whitespace html-entities

我遇到的情况是我将字符串传递给函数。我希望在将 传递给函数之前将html_entity_decode转换为“”(空格)。 str_replace会这样做吗?

如果没有怎么办?

我知道{{1}}但是还有其他出路吗?

4 个答案:

答案 0 :(得分:35)

来自html_entity_decode()手册:

  

你可能想知道为什么   trim(html_entity_decode(' '));   不会将字符串减少为空   字符串,那是因为' '   实体不是ASCII码32(即   由trim()剥离但ASCII码160   默认ISO 8859-1中的(0xa0)   字符集。

您可以使用str_replace()将ascii字符#160替换为空格:

<?php
$a = html_entity_decode('>&nbsp;<');
echo 'before ' . $a . PHP_EOL;
$a = str_replace("\xA0", ' ', $a);
echo ' after ' . $a . PHP_EOL;

答案 1 :(得分:5)

请参阅PHP手册http://php.net/manual/en/function.html-entity-decode.php

仔细阅读注释,也许这就是您面临的问题:

  

你可能想知道为什么修剪(html_entity_decode('&amp; nbsp;'));   不会将字符串减少为空字符串,   那是因为''实体不是ASCII码32   (由trim()剥离)但默认ISO 8859-1字符集中的ASCII代码160(0xa0)。

答案 2 :(得分:4)

html_entity_decode会将&nbsp;转换为空格,而不是“简单”空格(ASCII 32),而是非空格(ASCII 160)(因为这是&nbsp;的定义)

如果您需要转换为ASCII 32,您仍然需要str_replace(),或者根据您的具体情况,preg_match("/s+", ' ', $string)将所有类型的空白转换为简单空格。

答案 3 :(得分:1)

不确定大多数情况下是否可行,但是我在最近的应用程序中使用了trim(strip_tags(html_entity_decode(htmlspecialchars_decode($html), ENT_QUOTES, 'UTF-8')));。最初添加htmlspecialchars_decode()是唯一可以真正去除它们的东西。