【发布时间】:2011-09-10 15:34:06
【问题描述】:
我有一种情况,我将字符串传递给函数。我想在将  传递给函数之前将其转换为“”(空格)。 html_entity_decode 有吗?
如果不行怎么办?
我知道str_replace,但还有其他出路吗?
【问题讨论】:
标签: php html string whitespace html-entities
我有一种情况,我将字符串传递给函数。我想在将  传递给函数之前将其转换为“”(空格)。 html_entity_decode 有吗?
如果不行怎么办?
我知道str_replace,但还有其他出路吗?
【问题讨论】:
标签: php html string whitespace html-entities
html_entity_decode 确实将  转换为空格,但不是“简单”空格(ASCII 32),而是不间断空格(ASCII 160)(因为这是  的定义)。
如果您需要转换为 ASCII 32,您仍然需要 str_replace(),或者根据您的情况,使用 preg_match("/s+", ' ', $string) 将各种空格转换为简单空格。
【讨论】:
引用自html_entity_decode()手册:
你可能想知道为什么
trim(html_entity_decode(' '));不会将字符串减少为空 字符串,那是因为' '实体不是 ASCII 码 32(即 由 trim()) 剥离,但 ASCII 码为 160 (0xa0) 默认 ISO 8859-1 字符集。
您可以使用str_replace() 将ascii 字符#160 替换为空格:
<?php
$a = html_entity_decode('> <');
echo 'before ' . $a . PHP_EOL;
$a = str_replace("\xA0", ' ', $a);
echo ' after ' . $a . PHP_EOL;
【讨论】:
contenteditable 元素中检索到的数据,所有rtrim 和preg_replace 尝试都失败了。在用$.ajax() 拍摄之前,我也一直在尝试用 JavaScript 过滤东西,也失败了。所以现在我做str_replace("&nbsp;", ' ', $value) 然后preg_replace('/\s+$/','',$value)。它工作,虽然不是太优雅。如果有人有建议,请告诉我,
参见 PHP 手册http://php.net/manual/en/function.html-entity-decode.php。
仔细阅读注意事项,也许这就是你面临的问题:
你可能想知道为什么 trim(html_entity_decode(' ')); 不会将字符串缩减为空字符串, 那是因为 ' ' 实体不是 ASCII 码 32 (由 trim() 去除)但默认 ISO 8859-1 字符集中的 ASCII 代码 160 (0xa0)。
【讨论】:
不确定这对于大多数情况是否是可行的解决方案,但我在最近的应用程序中使用了trim(strip_tags(html_entity_decode(htmlspecialchars_decode($html), ENT_QUOTES, 'UTF-8')));。最初添加htmlspecialchars_decode() 是唯一真正剥离它们的东西。
【讨论】: