2014-04-30 33 views
0

作爲內容類型,應用程序/應用程序/應用程序將遠程SMS服務(我無法影響)POST文本消息發送到PHP控制器(Symfony2應用程序) x-www-form-urlencodedPHP應用程序/ x-www-form-urlencoded錯誤地解碼特殊字符

PHP無法正確解碼特殊字符。

tcpdump的節目(簡稱 - 只顯示有問題的數據)

User-Agent: smsd (libwww-perl/5.805) 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 123 

data=ae+%E4+ue+%FC+oe+%F6+sz+%DF 

ae ä ue ü oe ö sz ß 

和PHP $ _POST持有(連載)

;s:4:"data";s:19:"ae ###e ###### sz ##; 
原始數據

我想,這是缺少的charset = UTF-8,導致麻煩。

如果有人有一個想法如何克服這一點,我會很感激你的答案。感謝名單。

+0

你爲什麼要序列化它? – AbraCadaver

+0

我想他只是爲了向我們展示原始內容。 – Barmar

+0

@Barmar correct – erasmus

回答

0

對於這個特定的問題,我現在使用iconv找到了一個解決方案。

$decoded = iconv('ISO-8859-1', 'UTF-8', urldecode($encoded)); 

我認爲正在使用的字符集標準在PHP> = 5.4進行urlencode/urldecode現在是UTF-8,雖然我沒有找到在更改日誌專門爲這些功能的東西。

+0

爲了詳細闡述我的答案:它不是一個缺失的charset = UTF-8,它顯然是造成這個問題的原因,但是自從5.4以來在PHP中隱式使用UTF-8。也許在標題中顯式字符集= ISO-8859-1將幫助,雖然... – erasmus