我发现PHP中的功能,它可以很好地读取MS Word .doc 文件,但是当文件包含一些“ěščř...”字符时,它会返回diamont字符中的问号(无法识别的字符) ?)
功能看起来像这样
if ( file_exists($filename) ) {
if ( ($fh = fopen($filename, 'r')) !== false ) {
$headers = fread($fh, 0xA00);
# 1 = (ord(n)*1) ; Document has from 0 to 255 characters
$n1 = ( ord($headers[0x21C]) - 1 );
# 1 = ((ord(n)-8)*256) ; Document has from 256 to 63743 characters
$n2 = ( ( ord($headers[0x21D]) - 8 ) * 256 );
# 1 = ((ord(n)*256)*256) ; Document has from 63744 to 16775423 characters
$n3 = ( ( ord($headers[0x21E]) * 256 ) * 256 );
# (((ord(n)*256)*256)*256) ; Document has from 16775424 to 4294965504 characters
$n4 = ( ( ( ord($headers[0x21F]) * 256 ) * 256 ) * 256 );
# Total length of text in the document
$textLength = ($n1 + $n2 + $n3 + $n4);
$extracted_plaintext = fread($fh, $textLength);
# if you want the plain text with no formatting, do this
//echo $extracted_plaintext;
echo mb_detect_encoding($extracted_plaintext);
# if you want to see your paragraphs in a web page, do this
echo nl2br($extracted_plaintext);
}
}
我也试图将字符编码更改为UTF-8,其中我通过类似的方式获得整个网页内容
$extracted_plaintext = iconv("UTF-8","UTF-8//IGNORE",$extracted_plaintext);
但它只删除无效字符,因此文本也不可读。所以我不确定,如果这个问题真的在charset或其他什么?我认为UTF-8是正确的,因为如果我使用
echo mb_detect_encoding($extracted_plaintext);
它返回UTF-8
编辑:here附有文件示例
答案 0 :(得分:0)
您是否尝试过另一个代码页?
根据我的经验,Microsoft Office的文档总是使用本地化编码,比如台湾地区的Big5。
“diamont字符中的问号”总是意味着错误的编码,但试图通过UTF8读取。尝试在 UTF8 http://www.gundamhk.com/
中查看 BIG5 论坛编辑: 我发现你的文件不是UTF-8,但最近的字符集是:
(和其他相似的名字) 要查看最近的结果,请使用:
header('Content-Type: text/html; charset=Windows-1250');
我无法找到这些字符的完全匹配代码页,但只需查看PHP official supported character set ,这些角色似乎不在那个列表中。如果你仍然需要处理这些角色,可能会非常痛苦。
答案 1 :(得分:0)
阅读doc / ppt文件有点问题(甚至没有谈论特殊字符)所以我发现将文档转换为pdf更有用,然后阅读pdf更容易。也许这将有助于将来不要浪费尽可能多的时间来尝试阅读.doc或.ppt