首頁 >後端開發 >PHP問題 >如何解決php讀取word 中文亂碼問題

如何解決php讀取word 中文亂碼問題

藏色散人
藏色散人原創
2021-12-09 09:50:032991瀏覽

php讀取word中文亂碼的解決方法:1、查看php版本;2、修改php.ini並且重啟伺服器;3、透過「iconv('GB2312', 'UTF-8', $test );」解決讀取過程中亂碼問題即可。

如何解決php讀取word 中文亂碼問題

本文操作環境:Windows7系統,PHP7.4版,Dell G3電腦。

如何解決php讀取word 中文亂碼問題?

php讀取word檔案過程中亂碼,怎麼解決?

一、先確認php版本,最好是高於5.6

二、啟用PHP Com 擴充功能

// 将以下两行代码放入php.ini中, 并且重启服务器
// 开启扩展
extension=php_com_dotnet.dll
// COM扩展里自带的,只需将前面的;去掉就可以了
com.allow_dcom = true

三、程式碼如下:

    public function readWord($url)
    {
        $word = new COM("word.application") or die("Unable to instantiate Word");

        // 打开路径为URL的word,doc或docx都可以
        $word->Documents->OPen($url);

        // 读取内容
        $test= $word->ActiveDocument->content->Text;

        // 统计字数
        // $num = strlen($test);

        // 解决读取过程中乱码问题
        $content= iconv('GB2312', 'UTF-8', $test);

        // 查看版本
        // $word_wersion = $word->Version;

        // 是否要打开文件,0代表否,1代表是
        $word->Visible = 0;

        // 关闭word句柄
        $word->Quit();

        // 释放对象
        $word = null;

        return [
            // 'num' => $num / 2,
            // 'word_wersion' => $wordWersion,
            'content' => $content
        ];
    }

注意:

#問題一:

檔url有一個地方要注意,就是你們傳進來的url千萬不能是絕對位址,不能是D:\WWW\這種,,一定要自己框架的路由位址,例如localhost/…,不然會出現錯誤,因為用絕對位址讀取word內容,只能讀取一次,然後word就會被鎖定,然後就無法讀取了。

問題二:

使用這種方式雖然解決了讀取Word內容亂碼的問題,但是只限於讀取純文字的Word,而且是沒有樣式的那種。如果需要取得Word文件的內容包括樣式、圖片、字體等,這種方式就不適合。

我們處理的方式是,採用Aspos。用Java做了一個底層服務,把上傳的Word文檔都轉成html格式的,如果文檔中有圖片的話,轉換後圖片會被提取到同級目錄,並在生成的html文件中留下 <img> 標籤。這樣Word文件中的字體和樣式就變成了HTML程式碼,最大程度保留了原文檔的樣式。

推薦學習:《PHP影片教學

#

以上是如何解決php讀取word 中文亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn