|簡體中文

比思論壇

 找回密碼
 按這成為會員
搜索



查看: 746|回復: 2
打印 上一主題 下一主題

Linux编程之php读取文件出现乱码问题的解决方法

[複製鏈接]

989

主題

1

好友

5288

積分

教授

Rank: 8Rank: 8

  • TA的每日心情

    2024-9-18 07:17
  • 簽到天數: 1252 天

    [LV.10]以壇為家III

    推廣值
    2
    貢獻值
    378
    金錢
    1714
    威望
    5288
    主題
    989

    回文勇士 文明人 中學生 高中生 簽到勳章 簽到達人 男生勳章 大學生 文章勇士 附件高人 附件達人 文章達人 教授

    樓主
    發表於 2012-9-19 21:51:07
      php读取文件乱码问题的解决方法:
       
        php5中的流读取函数的默认编码貌似是UTF-8,而php4里直接file_get_contents()读取gb2312编码的正常,到了5就乱码了。
       
        网上的解决办法说抓取后用iconv()转码。看后就觉得不对劲:一个是不一定编译了iconv库,更大的问题是编码都跟流转换的时候有关(如果用了iconv实际上php转了两次码:流 -> UTF-8 -> GB2312)
       
        仔细看了下php的文档(不知道大家都是怎么写代码的,其实文档上很清楚啊),上面关于fopen()及file_get_contents()都 提到了“默认是UTF-8,但是用户可以用stream_default_encoding()或者用户自定义上下文属性改变编码”,手册上写道(If unicode semantics are enabled, the default encoding of the read data is UTF-8. You can specify a different encoding by creating a custom context or by changing the default using stream_default_encoding()。)。于是用stream_default_encoding(‘gb2312’);测试:但是 faint的是,这个函数不存在?!似乎php 6才支持。不过天无绝人之路,还有“用户自定义上下文属性”可以用。
       
        经过更仔细的看文档,最后解决了这个问题:
       
        代码如下:
       
        <?php
       
        //设置流的编码格式,这是文件流(file),如果是网络访问,file改成http
       
        $opts = array(‘file' => array('encoding' => 'gb2312’));
       
        $ctxt = stream_context_create($opts);
       
        file_get_contents(文件名, FILE_TEXT, $ctxt);
       
        ?>

    2

    主題

    2

    好友

    975

    積分

    高中生

    Rank: 4

  • TA的每日心情
    擦汗
    2022-3-28 23:53
  • 簽到天數: 713 天

    [LV.9]以壇為家II

    推廣值
    0
    貢獻值
    0
    金錢
    6651
    威望
    975
    主題
    2
    沙發
    發表於 2012-9-19 23:46:37
    好久都不用LINUX了
    重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

    手機版| 廣告聯繫

    GMT+8, 2024-9-28 01:21 , Processed in 0.018409 second(s), 26 queries , Gzip On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回頂部