2011-12-02 49 views
2

我正在使用PHP,从网站获取HTML,将它们转换为纯文本并将它们保存到数据库。HTML到明文 - 未知原始编码

他们需要在utf-8中保存到数据库中。 我的第一个问题是我不知道原始编码,从未知编码编码为utf-8的最佳方法是什么?

第二个问题是html到纯文本的转换。我尝试使用html2text,但它搞砸了所有的外国UTF字符。

什么是最好的方法?

编辑:看来关于纯文本的部分还不够清楚。我不需要去除html标签。我想剥离标签,同时保持一种文档结构。 <p><li>标签将转换为换行符等标签,如<script>将被完全删除与他们的内容。

+0

你尝试函数utf8_encode? –

+0

@AntonioLaguna utf8_encode只转换在ISO-8859-1中编码的字符串 – applechief

+0

不确定你想要从“文本/纯文本”编码中想要什么(无论你想保留标签,剥离标签还是其中的某个地方)......可能值得看看HTML Purifier进行转换:http://htmlpurifier.org/ – CD001

回答

3
  • 使用mb_detect_encoding()进行编码检测。

  • 使用strip_tags()摆脱HTML标签。

其他格式化输出的主题取决于您的需求。

编辑:我不知道是否存在一个完整的解决方案,但这个链接真的有助于改进现有的html到文本PHP脚本。

http://www.phpwact.org/php/i18n/utf-8

+0

mb_detect_encoding似乎是我正在寻找。但条形标签不是很完美。我需要一个更高级的库,比如html2text,这会对utf8友好。 – applechief

+0

@chaft:html2text用于转换和_formatting_文本。如果它是友善的,那么它不应该搞乱人物。检查[此链接](http://www.rdeeson.com/weblog/61/using-multi-byte-character-sets-in-php-unicode-utf-8-etc.html)其中指出“['strip_tags (多字节UTF-8字符不包含类似于小于或大于符号的字节序列)避免UTF-16和UTF-32,等等。“ – Herbert

+0

请检查我的更新。 –

1

此功能可能对你有用:

<?php 
function FixEncoding($x){ 
    if(mb_detect_encoding($x)=='UTF-8'){ 
    return $x; 
    }else{ 
    return utf8_encode($x); 
    } 
} 
?> 
+0

是的,但不是与utf8_encode,你应该使用mb_convert_encoding。 utf_encode仅从ISO-8859-1进行编码 – applechief