Hopes

          Start Here..

           

          Ajax+PHP的編碼問題總結

          Ajax+PHP的編碼問題總結


          我暈。。。。。。。。。。
          弄了一天,總算把Ajax+PHP的編碼問題弄清楚了。。。。。。。。。。
          總結一下吧,省的忘了-------

          1、Html被瀏覽器用什么字符打開,由下面兩種情況:

          (1)<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
          這樣就告訴了瀏覽器用gbk打開,如果你的html里面由utf-8的中文,則顯示亂碼

          (2)沒有用<meta charset />指明編碼,則你的html文件是用什么編碼寫的,就用什么編碼打開!

          2、瀏覽器遇到PHP文件,用什么字符顯示,也有下面兩種情況:

          (1)header('Content-Type:text/html;charset=utf-8');---則告訴你的瀏覽器用utf-8顯示
          如果你的php文件是用GBK寫的,且里面有中文要顯示,則亂碼。

          (2)如果沒有header指定編碼,則由php.ini中的default-charset指定的編碼顯示

          3、Ajax與PHP文件的交互:

          (1)發送---不管js是由GBK還是UTF-8寫的,里面的中文傳到PHP后,都變成了正確UTF-8編碼的中文[注意,不是亂碼哦!]

          (2)接收---不管js,php,php.ini的編碼如何,也不管是什么瀏覽器......
          只要PHP文件加上了header('Content-Type:text/html;charset=utf-8');
          而且echo的中文都是正確的UTF-8編碼,則肯定OK!

          (3)實現(2)的方法及注意事項---------

          [1]假如PHP為GBK編碼,想往JS傳中文"哈哈",方法----$message = iconv("gbk","utf-8","哈哈"); echo $message;

          [2]假如PHP為GBK編碼,想先存入數據庫(utf-8),然后再取出傳回JS,方法-$message = iconv("gbk","utf-8","哈哈")

          (注:有時會用到這個函數---mysql_query("SET NAMES 'UTF8'");作用---告訴數據庫,"我傳給你的將是一段X編碼的數據,請按 X編碼理解","你傳給我的數據也必須翻譯成X編碼的,我只懂X編碼")

          [3]// $message = strip_tags($message); // $message = htmlentities($message, ENT_QUOTES);
          這兩個討厭的函數,會使$message變成亂碼,具體為什么暫時還沒查閱!!!

          4、總結:

          (1)如果服務器是UTF-8編碼,建議HTML,JS,PHP,MYSQL均用UTF-8寫,這樣什么都不用管,就OK!

          (2)如果服務器是GBK編碼,建議HTML,JS,PHP用GBK編寫,MYSQL還是用UTF-8,

          [1]需要PHP傳中文到--->JS時,方法:header(..."utf-8"),且傳的中文都用iconv函數處理!

          [2]需要PHP存中文到數據庫時,方法:插入的中文用iconv函數處理之后再insert...

          5、補充:

          (1)我假設,這里有一個PHP函數能正確實現JS里的unescape的功能!
          現在有一個gb2312格式的HTML頁面,其中的數據escape后經過ajax傳到后臺PHP頁面中
          php unescape處理后 數據變成了什么格式? [后臺為gb2312]

          如果前臺不做escape處理,后臺也不做 unescape處理呢? [后臺為UTF-8]

          注:The escape() function encodes a string, so it can be read on all computers.
          escape()方法將字符串轉換為特定的編碼,使其能夠被任意的計算機識別和讀取。

          實例---
          In this example we use escape() to encode strings:
          在下面的例子中我們用escape()來加密字符串:

          <script type="text/javascript">document.write(escape("歡迎來到POP") + "<br />")document.write(escape("?!=()#%&"))</script>

          The output of the code above will be:
          輸出結果為:

          Visit%20W3Schools%21%3F%21%3D%28%29%23%25%26

          ----------------------------------------------------------------------------------------------------------------------------

          (2)mb系列函數:

          php5漢字處理和字符串處理編碼模式不同

          例如,當我們使用strlen 這個函數 獲得漢字的長度的時候 例如這個漢字串“我愛中國”

          那么它返回的將是8個,而不是4個當我們希望得到4個的時候,我們就必須借用加前綴的mb_函數了

          他的意思是多字節字符處理函數,此類函數的參數的最后一參數為,編碼模式,有默認值,但我們要用

          “Gb2312”,此編碼模式,正確解析漢字;


          實例:
          mb_strlen($txt,"GB2312 ")

          function indexOf($sorce,$chinese) {
          return ( @mb_strpos($sorce,$chinese,null,"GB2312") );
          }

          function charAt($sorce,$numpos) {
          return ( mb_substr($sorce,$numpos,1,"Big5") );
          }

          function charAt($sorce,$numpos) {
          return ( mb_substr($sorce,$numpos,1,"Big5") );
          }

          posted on 2013-01-17 10:26 ** 閱讀(177) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學習

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 丁青县| 莲花县| 文水县| 洛宁县| 赞皇县| 尚志市| 子洲县| 北票市| 平远县| 比如县| 瑞昌市| 龙海市| 武隆县| 山丹县| 蒙山县| 拉萨市| 桃园市| 永德县| 普安县| 邛崃市| 霞浦县| 额尔古纳市| 西华县| 合肥市| 开鲁县| 渭南市| 乐平市| 墨玉县| 登封市| 且末县| 嘉兴市| 类乌齐县| 桐柏县| 枣庄市| 富民县| 白河县| 玉田县| 兴和县| 邹平县| 京山县| 东源县|