2011-06-14 54 views
1

我有與PHP相關的第n個問題編碼!PHP在編寫web服務調用時的編碼問題

這樣的故事是:

  • 我從一個文件(ISO-8859)讀取URL。我不能改變這個文件的編碼,因爲我不會在這裏討論。

  • 我使用該網址來調用其他web服務。

  • 這個url恰好包含了符號「è」,這個符號在PHP引擎加載時傳遞給 。

  • 因此,web服務返回併產生意外的結果,因爲它得到的實際上是「perch 」而不是「perchè」。

我試圖強迫PHP做符合ISO-8859的工作:

ini_set('default_charset', "ISO-8859"); 

的問題是,它仍然無法正常工作和web服務不能正確回答。我確定web服務正常工作,因爲我試圖在瀏覽器中手動複製粘貼網址,並收到了預期的數據。

+0

備註:一個URL不應該包含非ASCII - 即使它通常有效,它們也應該是URL編碼的。 – 2011-06-14 14:54:28

回答

1

您可以使用iconv()將數據從一個字符集轉換爲另一個字符集。發送請求之前

$data = iconv("iso-8859-1", "utf-8", $data); 

你的REST Web服務是最有可能期待UTF-8的數據,所以你會做這樣的事情。

+0

偉大的伴侶!你讓我的一天 – nourdine 2011-06-14 14:13:04

+0

佩卡,你必須有魔法能力。我在這個問題中讀到:「我從一個文件(ISO-8859)中讀取了一個URL,由於種種原因,我不能改變這個文件的編碼。」 – hakre 2011-06-14 14:22:35

+0

@好吧,他可以在從文件中讀取後更改URL,不是嗎? – 2011-06-14 14:29:24