通过php函数从Word doc文件中读取字符“ěščřž...”,返回菱形中的问号

时间:2016-04-28 07:40:38

标签: php utf-8 character-encoding doc

我发现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附有文件示例

2 个答案:

答案 0 :(得分:0)

您是否尝试过另一个代码页?

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

“diamont字符中的问号”总是意味着错误的编码,但试图通过UTF8读取。尝试在 UTF8 http://www.gundamhk.com/

中查看 BIG5 论坛

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

  • 视窗-1250,
  • Windows的1252
  • ISO-8859-1
  • ISO-8859-2

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

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

我无法找到这些字符的完全匹配代码页,但只需查看PHP official supported character set ,这些角色似乎不在那个列表中。如果你仍然需要处理这些角色,可能会非常痛苦。

答案 1 :(得分:0)

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