PHP中xajax庫中文問題及提示返回XML檔案無效的解決辦法

來源:互聯網
上載者:User

xajax是PHP下一個非常好的ajax架構,雖然xajax自己說自己是一個庫(Library),但是我覺得它更像一個架構(Framework)。xajax是一個開源的 PHP 類庫 它能夠讓你黏合HTML、CSS、Javascript和PHP,並可以結合Smarty模板系統使用。

在運用Xoops的Page模組的時候,發現其不能和中文正常工作,特別是不能和UTF-8編碼的頁面一起工作,昨天在利用這個實現DataGrid的時候發現完全不能正常工作了,一直報“the XML response that was returned from the server is invalid”這個錯誤,Google了一下,發現不少人也有這個問題。結合之前解決Xoops的Page模組(感謝文明豬)的UTF-8使用問題的方法,終於發現了完美解決xajax庫使用中文的方法。

如果頁面採用GB2312或GBK作為編碼或字元集,一般網路上面提到的方法可以解決:需要注意的是common.php、server.php及server.php用到的php檔案(特別是產生資料的檔案)全部不要使用UTF-8編碼格式儲存而使用ASCII格式儲存。同時server.php輸出的資料內容最好也採用gb2312編碼。

在common.php前面定義

PHP代碼

define('XAJAX_DEFAULT_CHAR_ENCODING','GB2312');

再在調用時使用:

PHP代碼

$xajax = new xajax();

$xajax->decodeUTF8InputOn();

或者

PHP代碼

$xajax = new xajax('gb2312');

$xajax->setCharEncoding();

$xajax->decodeUTF8InputOn();

$objResponse = new xajaxResponse('gb2312');

如果頁面採用UTF-8字元集的話,網上一些人說使用UTF-8格式編碼就可以了,實際上即使全部使用UTF-8編碼也不能正常工作,還是會報錯:“the XML response that was returned from the server is invalid”。聯想到之前在IE下碰到UTF-8 BOM Bug(文章:IE下頁面無端端空出一行及utf8頁面無法顯示的解決方案 ),會不會這個地方伺服器傳回的XML檔案中也包含多個UTF-8 BOM內容呢?通過ethereal截獲資料包發現,伺服器返回的內容中還真是包含了多個UTF-8 BOM,可能還是IE使用的Microsoft XML Parser的UTF-8 BOM Bug吧。這樣解決辦法就出來了:所有頁面全部採用UTF8編碼並使用無UTF-8 BOM儲存(UltraEdit 操作方法:F12或另存新檔介面中格式下拉框選擇‘UTF-8-無 BOM’),頁麵包括xajax庫檔案、common.php檔案、server.php檔案。供訪問的頁面也可以使用無UTF-8 BOM儲存。

有時候返回的參數(特別是中文部分)被url編碼了,這個時候需要我們將返回的資料使用Urldecode進行處理,以便能夠正常完成後面的資料庫操作。

最新xajax 0.25下載地址:http://prdownloads.sourceforge.net/xajax/xajax_0.2.5.zip?download

xajax中文手冊(HonestQiao第一版,FlyingHail修改版) http://www.flyinghail.net/?p=44

UTF-8 BOM解釋:"EF BB BF" 這三個位元組就叫BOM,BOM的全稱叫做"Byte Order Mard"。在UTF-8檔案中常用BOM來表明這個檔案是UTF-8檔案,而BOM的本意實在UTF-16中用來表示高低位元組序列的。

另外,PHP網站上說使用--enable-zend-multibyte可以解決這類問題,不過沒有嘗試,並且預計在PHP 6.0中會對Unicode做完美的支援。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.