簡體   English   中英

PHP不會從C ++生成urldecode()字符串

[英]PHP wont urldecode() string from C++

因此,我正在發送帶有一個變量的帖子消息,它是UrlEncoded的base64編碼的字符串。

當我通過Firefox網絡調試器發送字符串時,它可以正常工作。 使用Firefox調試器時,我什至不需要urldecode,它是自動完成的。

但是,當我從C ++應用程序發送它時,它根本不會解碼。

該字符串是Unicode字符串,我的C ++應用程序全部是Unicode。

我有header("Content-Type: text/html; charset=UTF-8"); 在我的php頁面頂部以確保。

我的php應用程序將響應重復回到c ++應用程序。

if($encData = input::get('x')){
    echo $encData;
}

我得到我的響應,但未解碼,即使我使用urldecode()rawurldecode()

謝謝你的幫助 :)

Unicode不是一回事。 Unicode既指Unicode標准(與代碼點的塊關聯的符號塊),又表示代表文本的代碼點的幾種編碼

有幾種類型的字符串。 例如,在Windows上,有“ ASCII”和“ Wide”字符串,因此WinAPI函數上的A和W后綴。 “ ASCII”是指它在字符串中使用8位char的事實,而“寬”是指(在Windows上)針對字符串中的每個字符使用16位short事實。 (其他平台(例如Linux)標准化了對寬字符串使用32位字符。)

您提供代碼示例顯示您正在使用寬字符串,並通過鏈接原始發送它們。 Windows的16位寬字符串通常使用UCS-2 Unicode編碼(這與UTF-16非常相似,但不相同),而PHP和HTTP標准都希望使用8位字符,並且默認情況下,PHP需要UTF-8字符串。 這在您提供數據轉儲中很明顯,因為它顯示了每個8位字符之間的NUL字節。 (這是發送Latin-1文本時UCS-2的外觀。)

由於PHP需要UTF-8,並且您要發送UCS-2,因此PHP無法理解文本,因此urldecode函數無法對其進行任何處理。

發送之前,您需要將字符串轉換為8位編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM