HTML 到纯文本 - 未知的原始编码
Posted
技术标签:
【中文标题】HTML 到纯文本 - 未知的原始编码【英文标题】:HTML to plaintext - unknown original encoding 【发布时间】:2012-01-11 15:24:00 【问题描述】:我正在使用 php,从网站获取 html,将它们转换为纯文本并将它们保存到数据库中。
它们需要以 utf-8 格式保存到数据库中。 我的第一个问题是我不知道原始编码,从未知编码编码到 utf-8 的最佳方法是什么?
第二个问题是 html 到纯文本的转换。我尝试使用 html2text 但它弄乱了所有外国 utf 字符。
最好的方法是什么?
编辑: 纯文本部分似乎不够清晰。我不需要只剥离 html 标签。我想在保持一种文档结构的同时剥离标签。 <p>
、<li>
标签将转换为换行符等,<script>
等标签将与其内容一起完全删除。
【问题讨论】:
@AntonioLaguna utf8_encode 只转换以 ISO-8859-1 编码的字符串 不确定你到底想从text/plain
编码中得到什么(无论你是想保留标签,剥离标签,还是介于两者之间)......可能值得看看 HTML Purifier不过为了您的转换:htmlpurifier.org
相关:***.com/questions/1884550/…
【参考方案1】:
使用mb_detect_encoding()
进行编码检测。
使用strip_tags()
去除HTML标签。
其他主题(例如格式化输出)取决于您的需求。
编辑:我不知道是否存在完整的解决方案,但此链接对于改进现有的 html 到您自己的文本 PHP 脚本非常有帮助。
http://www.phpwact.org/php/i18n/utf-8
【讨论】:
mb_detect_encoding 似乎是我正在寻找的。但带标签不完全是它。我需要一个更高级的库,比如对 utf8 友好的 html2text。 @chaft: html2text 用于转换和格式化文本。如果它是 utf8 友好的,那么它不应该弄乱字符。检查this link,其中声明“[strip_tags()
] 如果仅使用 UTF-8 可能是多字节安全的(多字节 UTF-8 字符不包含类似于小于或大于符号的字节序列)。避免UTF-16 和 UTF-32 等。”
@EmirAkaydın:如果可以的话,我会再次 +1 你的答案。 :)
@Herbert html2text 对 utf8 不友好。 strip_tags() 不是我要找的。它不分青红皂白地剥离标签,并可能破坏带有 html 标签的文本。 + 带有 【参考方案2】:
这个功能可能对你有用:
<?php
function FixEncoding($x)
if(mb_detect_encoding($x)=='UTF-8')
return $x;
else
return utf8_encode($x);
?>
【讨论】:
是的,但不是utf8_encode,你应该使用mb_convert_encoding。 utf_encode 仅从 ISO-8859-1 编码以上是关于HTML 到纯文本 - 未知的原始编码的主要内容,如果未能解决你的问题,请参考以下文章