2012-05-09 81 views
2

我正在研究一個應用程序,我需要能夠從JavaScript向PHP發送字符串。起初,我剛剛通過$_POST變量發送了它,但我注意到它將值插入字符串中。PHP將無意義的字符插入到字符串中

然後我重新編寫了兩個部分,使用base 64發送數據,因爲我認爲數據在傳輸過程中被損壞。這個字符串被轉移的很好,沒有錯誤,但是當我將它從base 64轉換回base 16時,它有和以前完全相同的錯誤!

這是兩個字符串(十六進制轉儲)的比較。每個字符串中有兩塊有意義的數據塊,看起來PHP只是在這些區域附近出錯。第一行是PHP如何解釋字符串,第二行是我如何從JavaScript發送它。

c2 b0 c2 a7 c3 9a 7a 00 00 00 c2 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
b0 a7 da 7a 00 00 00 00 00 00 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

爲什麼會出現這些幻像字節?

編輯:這裏是我使用的代碼。

的JavaScript:

function sendRequest(body) 
{ 
    var url = "../update/index.php"; 
    $.post(url,{msg:body},function(data,status,jqx) 
    { 
     $("#response").html(data); 
    }); 
} 

body是一個字符串,它開始是硬編碼爲"\u00b0\u00a7\u00da\u007a"

然後在PHP:

$msg =$_POST['msg']; 
plain_hex_dump($msg); 

plain_hex_dump簡單地將字符串輸出作爲十六進制,從而導致第一的兩個六角形的上述轉儲。

+1

你能告訴我們你的代碼嗎? – Sampson

+0

我已更新帖子。但是,我認爲這個問題可能來自我不理解的一些編碼概念。我很確定我的JavaScript代碼不會生成使用多個字節的字符。 –

回答

3

這是UTF-8編碼。

b0編碼爲c2 b0a7變成c2 a7da變成c3 9a7a未更改。

因此,您的b0 a7 da 7a以UTF-8表示爲c2 b0 c2 a7 c3 9a 7a

它似乎是UTF-8編碼您的body變量。你可以嘗試在PHP中使用utf8_decode function

+0

非常感謝,解決了它!我一整天都在嘲笑那個人。 –