通过 php 函数,returns 菱形问号从 Word 文档中读取字符“ěščřž...”

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

我在 PHP 中找到了读取 MS Word .doc 文件的功能,但当文件包含一些“ěščř...”字符时,它returns 钻石字符中的问号(无法识别的字符?)

函数看起来像这样

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,这样我就可以通过这样的方式获得整个 Web 内容

$extracted_plaintext = iconv("UTF-8","UTF-8//IGNORE",$extracted_plaintext);

但它只删除无效字符,因此文本也不可读。所以我不确定,这个问题是否真的存在于字符集或其他任何问题中?我认为 UTF-8 是正确的,因为如果我使用 echo mb_detect_encoding($extracted_plaintext); 它 returns UTF-8

编辑:here 附上文件示例

您是否尝试过其他代码页?

根据我的经验,Microsoft Office 的文档总是使用本地化编码,台湾地区说 Big5。

“菱形字符中的问号”总是表示编码错误但试图通过 UTF8 读取。尝试在 UTF8 http://www.gundamhk.com/

中查看我的 BIG5 论坛

编辑: 我发现这不是您文档的 UTF-8,但最近的字符集是:

  • Windows-1250,
  • Windows-1252
  • ISO-8859-1
  • ISO-8859-2

(和其他相似的名字) 要查看最近的结果,请使用:

header('Content-Type: text/html; charset=Windows-1250');

我找不到这些字符的精确匹配代码页,但可以看看PHP official supported character set ,这些字符似乎不在list.It如果你仍然要处理这些字符可能会很痛苦。

阅读 doc/ppt 文件有点问题(甚至没有谈论特殊字符)所以我发现将文档转换为 pdf 然后阅读 pdf 更容易,这样更容易。也许这会帮助将来的人不会像我一样浪费太多时间去尝试阅读 .doc 或 .ppt