程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP XML error parsing SOAP payload on line 1

PHP XML error parsing SOAP payload on line 1

編輯:關於PHP編程

WebService,想必大家都比較熟悉,是由“服務提供方”向“服務調用方”提供服務的一種方式。裡面有幾項關鍵的技術:

XML:描述數據的標准方法
SOAP:簡單對象訪問協議,用於信息交換
WSDL:Web服務描述語言
UDDI:通用描述、發現與集成,它是一種獨立於平台的,基於XML語言的用於在互聯網上描述商務的協議。

  SOAP默認傳輸的都是UTF-8的編碼,這也決定了默認情況下WebService用的也是UTF-8編碼。

  現在維護的那個項目是一個PHP項目,編碼用的全是GBK,在調用自身提供的WebService方法時,就會遇到編碼問題了。PHP頁面調用WebService,而這個WebService又調用的是另一個調用COM組件的PHP類。大概場景就是這樣。
復制代碼 代碼如下:
PHP頁面(GBK) -> WebService(UTF-8) -> PHP類(GBK)

  在未遇到問題之前,一切都是風平浪靜的,就這樣過了很多年。有一天,公司收購了其它公司,為了整合服務,用戶信息也整合到一起了,原公司所有用戶的帳戶都是由英文字符加數字組成的,而收購的這個公司沒有做這樣的限定,帳戶有漢字的情況。整合之後,問題出現了,“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”!

  PHP剛接觸不久,不是甚熟,而且NetBeans的調試灰常不好整。所以就打開VS,引用WebService,開始測試。返回的結果,找不到用戶,而且是亂碼,OK,看了一下之後,由於WebService的UTF-8編碼傳給PHP類時,編碼不一致所導致!轉換為GBK再傳過去,收到數據後,找到用戶,但還是亂碼。將返回過來的數據再次轉換為UTF-8之後,一切OK!VS下測試一切正常!上測試機!開始測試!打開之後,亂碼!仍然是“error in msg parsing: XML error parsing SOAP payload on line 1: Invalid character [detail]”囧!

  靜下心來,繼續分析!應該是PHP頁面調用WebService時所導致!VS下面的那個測試頁面是UTF-8的,他們之間沒有問題,但PHP的這個頁面是GBK的。再次修改後,一切又恢復平靜了。
復制代碼 代碼如下:
調用:PHP頁面,參數轉換為UTF-8 -> WebService,轉換為GBK後 -> PHP類
返回:PHP類 -> WebService,收到後轉化為UTF-8 -> PHP頁面,轉換為GBK

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved