读字“ěščřž..“通过php函数从Word文档文件中返回菱形问号


Reading characters "ěščřž..." from Word doc file via php function, returns question mark in diamond

我在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