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 到纯文本 - 未知的原始编码的主要内容,如果未能解决你的问题,请参考以下文章

在 Adob​​e AIR 中读取未知编码的文本文件

PHP HTML到纯文本

如何检测文本文件的编码

nodejs 怎么判断 一个未知格式的buffer 的编码格式

处理标签编码的未知值

使用 ISO-8859-1 编码解析 DataMatrix 时出现未知编码错误