PHP XML error parsing SOAP payload on line 1
更新時(shí)間:2010年06月17日 09:28:55 作者:
PHP中GBK頁(yè)面調(diào)用WebService的編碼問題:XML error parsing SOAP payload on line 1
WebService,想必大家都比較熟悉,是由“服務(wù)提供方”向“服務(wù)調(diào)用方”提供服務(wù)的一種方式。里面有幾項(xiàng)關(guān)鍵的技術(shù):
XML:描述數(shù)據(jù)的標(biāo)準(zhǔn)方法
SOAP:簡(jiǎn)單對(duì)象訪問協(xié)議,用于信息交換
WSDL:Web服務(wù)描述語言
UDDI:通用描述、發(fā)現(xiàn)與集成,它是一種獨(dú)立于平臺(tái)的,基于XML語言的用于在互聯(lián)網(wǎng)上描述商務(wù)的協(xié)議。
SOAP默認(rèn)傳輸?shù)亩际荱TF-8的編碼,這也決定了默認(rèn)情況下WebService用的也是UTF-8編碼。
現(xiàn)在維護(hù)的那個(gè)項(xiàng)目是一個(gè)PHP項(xiàng)目,編碼用的全是GBK,在調(diào)用自身提供的WebService方法時(shí),就會(huì)遇到編碼問題了。PHP頁(yè)面調(diào)用WebService,而這個(gè)WebService又調(diào)用的是另一個(gè)調(diào)用COM組件的PHP類。大概場(chǎng)景就是這樣。
PHP頁(yè)面(GBK) -> WebService(UTF-8) -> PHP類(GBK)
在未遇到問題之前,一切都是風(fēng)平浪靜的,就這樣過了很多年。有一天,公司收購(gòu)了其它公司,為了整合服務(wù),用戶信息也整合到一起了,原公司所有用戶的帳戶都是由英文字符加數(shù)字組成的,而收購(gòu)的這個(gè)公司沒有做這樣的限定,帳戶有漢字的情況。整合之后,問題出現(xiàn)了,“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”!
PHP剛接觸不久,不是甚熟,而且NetBeans的調(diào)試灰常不好整。所以就打開VS,引用WebService,開始測(cè)試。返回的結(jié)果,找不到用戶,而且是亂碼,OK,看了一下之后,由于WebService的UTF-8編碼傳給PHP類時(shí),編碼不一致所導(dǎo)致!轉(zhuǎn)換為GBK再傳過去,收到數(shù)據(jù)后,找到用戶,但還是亂碼。將返回過來的數(shù)據(jù)再次轉(zhuǎn)換為UTF-8之后,一切OK!VS下測(cè)試一切正常!上測(cè)試機(jī)!開始測(cè)試!打開之后,亂碼!仍然是“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”囧!
靜下心來,繼續(xù)分析!應(yīng)該是PHP頁(yè)面調(diào)用WebService時(shí)所導(dǎo)致!VS下面的那個(gè)測(cè)試頁(yè)面是UTF-8的,他們之間沒有問題,但PHP的這個(gè)頁(yè)面是GBK的。再次修改后,一切又恢復(fù)平靜了。
調(diào)用:PHP頁(yè)面,參數(shù)轉(zhuǎn)換為UTF-8 -> WebService,轉(zhuǎn)換為GBK后 -> PHP類
返回:PHP類 -> WebService,收到后轉(zhuǎn)化為UTF-8 -> PHP頁(yè)面,轉(zhuǎn)換為GBK
XML:描述數(shù)據(jù)的標(biāo)準(zhǔn)方法
SOAP:簡(jiǎn)單對(duì)象訪問協(xié)議,用于信息交換
WSDL:Web服務(wù)描述語言
UDDI:通用描述、發(fā)現(xiàn)與集成,它是一種獨(dú)立于平臺(tái)的,基于XML語言的用于在互聯(lián)網(wǎng)上描述商務(wù)的協(xié)議。
SOAP默認(rèn)傳輸?shù)亩际荱TF-8的編碼,這也決定了默認(rèn)情況下WebService用的也是UTF-8編碼。
現(xiàn)在維護(hù)的那個(gè)項(xiàng)目是一個(gè)PHP項(xiàng)目,編碼用的全是GBK,在調(diào)用自身提供的WebService方法時(shí),就會(huì)遇到編碼問題了。PHP頁(yè)面調(diào)用WebService,而這個(gè)WebService又調(diào)用的是另一個(gè)調(diào)用COM組件的PHP類。大概場(chǎng)景就是這樣。
復(fù)制代碼 代碼如下:
PHP頁(yè)面(GBK) -> WebService(UTF-8) -> PHP類(GBK)
在未遇到問題之前,一切都是風(fēng)平浪靜的,就這樣過了很多年。有一天,公司收購(gòu)了其它公司,為了整合服務(wù),用戶信息也整合到一起了,原公司所有用戶的帳戶都是由英文字符加數(shù)字組成的,而收購(gòu)的這個(gè)公司沒有做這樣的限定,帳戶有漢字的情況。整合之后,問題出現(xiàn)了,“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”!
PHP剛接觸不久,不是甚熟,而且NetBeans的調(diào)試灰常不好整。所以就打開VS,引用WebService,開始測(cè)試。返回的結(jié)果,找不到用戶,而且是亂碼,OK,看了一下之后,由于WebService的UTF-8編碼傳給PHP類時(shí),編碼不一致所導(dǎo)致!轉(zhuǎn)換為GBK再傳過去,收到數(shù)據(jù)后,找到用戶,但還是亂碼。將返回過來的數(shù)據(jù)再次轉(zhuǎn)換為UTF-8之后,一切OK!VS下測(cè)試一切正常!上測(cè)試機(jī)!開始測(cè)試!打開之后,亂碼!仍然是“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”囧!
靜下心來,繼續(xù)分析!應(yīng)該是PHP頁(yè)面調(diào)用WebService時(shí)所導(dǎo)致!VS下面的那個(gè)測(cè)試頁(yè)面是UTF-8的,他們之間沒有問題,但PHP的這個(gè)頁(yè)面是GBK的。再次修改后,一切又恢復(fù)平靜了。
復(fù)制代碼 代碼如下:
調(diào)用:PHP頁(yè)面,參數(shù)轉(zhuǎn)換為UTF-8 -> WebService,轉(zhuǎn)換為GBK后 -> PHP類
返回:PHP類 -> WebService,收到后轉(zhuǎn)化為UTF-8 -> PHP頁(yè)面,轉(zhuǎn)換為GBK
您可能感興趣的文章:
- python爬蟲實(shí)現(xiàn)POST request payload形式的請(qǐng)求
- Python爬蟲:Request Payload和Form Data的簡(jiǎn)單區(qū)別說明
- java.lang.Runtime.exec() Payload知識(shí)點(diǎn)詳解
- Servlet獲取AJAX POST請(qǐng)求中參數(shù)以form data和request payload形式傳輸?shù)姆椒?/a>
- 實(shí)例詳解Nodejs 保存 payload 發(fā)送過來的文件
- 通過Python實(shí)現(xiàn)Payload分離免殺過程詳解
相關(guān)文章
php 自寫函數(shù)代碼 獲取關(guān)鍵字 去超鏈接
根據(jù)權(quán)重獲取關(guān)鍵字 去掉文章中的超鏈接簡(jiǎn)單,簡(jiǎn)潔2010-02-02centos7環(huán)境下swoole1.9的安裝與HttpServer的使用方法分析
這篇文章主要介紹了centos7環(huán)境下swoole1.9的安裝與HttpServer的使用方法,結(jié)合實(shí)例形式分析了centos7環(huán)境下swoole1.9的安裝、配置方法以及HttpServer的相關(guān)使用技巧,需要的朋友可以參考下2020-03-03Search File Contents PHP 搜索目錄文本內(nèi)容的代碼
這個(gè)類可以用來搜索在給定的文本目錄中的文件。它可以給定目錄遍歷遞歸查找某些文件擴(kuò)展名的文件。2010-02-02PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境
PHP學(xué)習(xí)筆記 IIS7下安裝配置php環(huán)境,需要的朋友可以參考下2012-10-10golang、python、php、c++、c、java、Nodejs性能對(duì)比
這篇文章主要介紹了golang、python、php、c++、c、java、Nodejs性能對(duì)比的相關(guān)資料,需要的朋友可以參考下2017-03-03利用PHP實(shí)現(xiàn)一個(gè)MySQL備份和恢復(fù)程序
由于客戶用的阿里云將要到期,需要把項(xiàng)目和阿里云上的數(shù)據(jù)庫(kù)都轉(zhuǎn)到政府云,數(shù)據(jù)肯定要轉(zhuǎn)過去,但是阿里云導(dǎo)出數(shù)據(jù)有數(shù)量限制,導(dǎo)出不全,所以就要程序執(zhí)行下,生成sql文件,然后導(dǎo)入政府云數(shù)據(jù)庫(kù),下面分享下具體實(shí)現(xiàn)過程2023-09-09