我在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);
但它只会删除无效字符,因此文本也是不可读的。所以我不确定,这个问题是否真的在字符集中,或者其他什么?我认为 UTF-8 是正确的,因为如果我使用 echo mb_detect_encoding($extracted_plaintext);
返回 UTF-8
编辑:这是附件示例
您是否尝试过其他代码页?
根据我的经验,Microsoft Office 的文档总是使用本地化编码,比如 Big5 当台湾地区。
"diamont 字符中的问号"总是意味着错误的编码,但试图通过 UTF8 读取。尝试以 UTF8 http://www.gundamhk.com/查看我的 BIG5 论坛
编辑:我已经发现这不是您文档的 UTF-8,但最接近的字符集是:
- 视窗-1250,
- 视窗-1252
- ISO-8859-1
- ISO-8859-2
(以及另一个类似的名字)要查看最近的结果,请使用以下命令:
header('Content-Type: text/html; charset=Windows-1250');
我找不到这些字符的完全匹配代码页,但只需查看PHP官方支持的字符集,这些字符似乎不在该列表中。如果您仍然必须处理这些字符,可能会非常痛苦。
阅读doc/ppt文件有点问题(甚至不谈论特殊字符) 所以我发现将文档转换为pdf然后阅读pdf更有用,这要容易得多。也许这将帮助将来有人不要像我一样浪费那么多时间来尝试阅读.doc或.ppt