在PHP中将HTML实体和特殊字符转换为UTF8文本

6
有很多关于在PHP中将HTML实体和特殊字符转换为UTF8文本的问题和文档。还有PHP文档本身,比如htmlspecialchars_decode()html_entity_decode()。然而,我找不到任何函数/解决方案清楚地描述如何将任何HTML字符和特殊实体转换为UTF-8文本。所有这些都陈述了类似于“如果你想这样做,那么就要这样做”等内容。但没有一个解决方案明确说明“为了拥有纯净的UTF-8文本,可以被人类阅读,那么就应该这样做”。
我提出问题的原因是我真的没有测试用例。我正在从数据库中读取数据,它是多语言的。但唯一的保证是字符是HTML格式,我需要将它们转换为UTF-8,以一种可以被懂得这些语言的人阅读的方式。现在,我该怎么办?什么是适当的方法来净化/解码输入,使其成为纯文本?
谢谢。

更新

这里是一个更新,从评论中可以看出我没有正确地提问。我的数据库包含文本。我想将该文本(其中包含HTML实体和特殊字符)转换为UTF-8文本,以便在网页上向最终用户显示。这些文本在数据库中使用多种语言编写(如法语、阿拉伯语、英语等)。所有这些都可能包含用于特殊字符的HTML实体。那么我该如何将所有这些转换为可被理解这些语言的人读取的UTF-8文本?我希望删除这些特殊字符并将它们转换为可被人类阅读的内容。


1
你看过 => https://dev59.com/13VC5IYBdhLWcg3wfhGL 吗? - Funk Forty Niner
1
你的数据库内容包含实体吗?这是你的意思吗?(只是问一下,因为你并没有明确说明;但仍然要求一个明确的答案)。或者你所说的“字符在HTML中”是什么意思?你想去掉标签吗?为什么不提供一个具体的样例来说明输入和输出的期望值呢? - mario
@Fred-ii- 是的,我有。它与此有些无关。我做了所有这些,但请注意,数据库内容来自其他来源(即,与我的设置无关)。唯一的保证是输入为HTML解码。我想将该输入更改为一些人类可读的文本。谢谢。 - Greeso
@mario - 我更新了问题。 - Greeso
1个回答

15

这对我来说是解码实体为utf8的有效方法:

html_entity_decode($str, ENT_QUOTES | ENT_HTML5, 'UTF-8');

编辑:-- 其中的“诀窍”在于第二个参数的组合,以及在第三个参数中包含编码方式。也就是说,如果您只是执行html_entity_decode($str);,结果将不会是utf8。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接