我遇到的情况是我将字符串传递给函数。我希望在将
传递给函数之前将html_entity_decode
转换为“”(空格)。 str_replace
会这样做吗?
如果没有怎么办?
我知道{{1}}但是还有其他出路吗?
答案 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('> <');
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会将
转换为空格,而不是“简单”空格(ASCII 32),而是非空格(ASCII 160)(因为这是
的定义)
如果您需要转换为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()
是唯一可以真正去除它们的东西。