当前位置:首页 > 技术教程 > 服务端 > HTML字符实体 解码后用php trim()函数无法清除的问题

HTML字符实体 解码后用php trim()函数无法清除的问题

admin2022-08-28 19:58:58服务端4570

背景:

    在做多语言翻译的时候,原始内容是用富文本编辑器编辑的。获取富文本编辑器的内容后拿去翻译成其它语言(如阿拉伯语、韩语、印度尼西亚语等),为了保持各种语言翻译结果的正确性,需要把原始内容中的html字符实体解码成对应的字符,然后再拿去翻译。碰到的问题是html字符实体 解码后用php trim()函数无法删除。


示例代码:

<?php
/**
 * html字符实体&nbsp;解码后用php trim()函数无法删除的问题
 * @date 2022-08-28 
 */

$a = "&nbsp;<span>It&#39;s a hot day.</span>";  // 从富文本编辑器中获取到的内容
var_dump($a);   // 输出内容:    string(38) "&nbsp;<span>It&#39;s a hot day.</span>"

$b = html_entity_decode($a, ENT_QUOTES);    // 将html字符实体解码成UTF-8编码的字符(html_entity_decode函数第三个参数不传的话默认是UTF-8编码)
var_dump($b);   // 输出内容:     string(30) " <span>It's a hot day.</span>"

$c = bin2hex($b);   // 将字符串转成十六进制
// 输出内容:     string(60) "c2a03c7370616e3e49742773206120686f74206461792e3c2f7370616e3e"
// 可以看出html字符实体&nbsp;解码成UTF-8编码后对应的十六进制为:0xc2 0xa0
var_dump($c);

$d = trim($b, chr(0xc2) . chr(0xa0));   // 去掉左右的0xc2字符拼接0xa0字符
var_dump($d);   // 输出内容:     string(28) "<span>It's a hot day.</span>"

$e = html_entity_decode($a, ENT_QUOTES, "ISO-8859-1");  // 将html字符实体解码成ISO-8859-1编码的字符
var_dump($e);   // 输出内容:     string(29) " <span>It's a hot day.</span>"

$f = bin2hex($e);   // 将字符串转成十六进制
// 输出内容:     string(58) "a03c7370616e3e49742773206120686f74206461792e3c2f7370616e3e"
// 可以看出html字符实体&nbsp;解码成ISO-8859-1编码后对应的十六进制为:0xa0
var_dump($f);   

$g = trim($e, chr(0xa0));   // 去掉左右的0xa0字符
var_dump($g);   // 输出内容:    string(28) "<span>It's a hot day.</span>"

?>

总结:

    1. php的html_entity_decode()函数的官方文档 https://www.php.net/manual/zh/function.html-entity-decode.php 有提到如下内容:

注意:

You might wonder why trim(html_entity_decode('&nbsp;')); doesn't reduce the string to an empty string, that's because the '&nbsp;' entity is not ASCII code 32 (which is stripped by trim()) but ASCII code 160 (0xa0) in the default ISO 8859-1 encoding.

    2. ISO 8859-1编码表可参见 https://zh.wikipedia.org/wiki/ISO/IEC_8859-1

iso 8859-1.png

    3. UTF-8 NO-BREAK SPACE可参见:https://www.fileformat.info/info/unicode/char/00a0/index.htm

2.png

扫描二维码推送至手机访问。

版权声明:本文由1688资源网发布,如需转载请注明出处。

本文链接:https://1688ziyuan.com/article/65.html

标签: php
分享给朋友:

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。