【问题标题】:Does html_entity_decode replaces   also? If not how to replace it?html_entity_decode 是否也替换?如果没有怎么更换?
【发布时间】:2011-09-10 15:34:06
【问题描述】:

我有一种情况,我将字符串传递给函数。我想在将  传递给函数之前将其转换为“”(空格)。 html_entity_decode 有吗?

如果不行怎么办?

我知道str_replace,但还有其他出路吗?

【问题讨论】:

  • 我需要一个建议,以便我可以尝试。
  • Herehere 回答了类似的问题(重点关注不同的编码)。

标签: php html string whitespace html-entities


【解决方案1】:

html_entity_decode 确实将  转换为空格,但不是“简单”空格(ASCII 32),而是不间断空格(ASCII 160)(因为这是  的定义)。

如果您需要转换为 ASCII 32,您仍然需要 str_replace(),或者根据您的情况,使用 preg_match("/s+", ' ', $string) 将各种空格转换为简单空格。

【讨论】:

  • $str = preg_replace('%\s+%u', ' ', $str);
【解决方案2】:

引用自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('>&nbsp;<');
echo 'before ' . $a . PHP_EOL;
$a = str_replace("\xA0", ' ', $a);
echo ' after ' . $a . PHP_EOL;

【讨论】:

  • 如果您使用 UTF-8 编码的字符串,您应该替换 \xC2\xA0 。 $a = html_entity_decode('> 
  • 我一直在努力处理从contenteditable 元素中检索到的数据,所有rtrimpreg_replace 尝试都失败了。在用$.ajax() 拍摄之前,我也一直在尝试用 JavaScript 过滤东西,也失败了。所以现在我做str_replace("&amp;nbsp;", ' ', $value) 然后preg_replace('/\s+$/','',$value)。它工作,虽然不是太优雅。如果有人有建议,请告诉我,
【解决方案3】:

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

仔细阅读注意事项,也许这就是你面临的问题:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 2020-12-14
      • 2013-06-22
      • 2021-09-26
      • 1970-01-01
      相关资源
      最近更新 更多