2016-06-16 50 views
1

我用這Ajax代碼將數據發送到服務器:

$.ajax({ 
    data: postData, 
    type: method, 
    url: url, 
    timeout: 20000, 
    contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
    error: function(jqXHR,textStatus,err){alert("Error returned from ajax call "+err);}, 
    success: function(data,status,jqXHR){ 
     // process response... 
    } 
}); 

postData是一個查詢字符串與許多值,而methodGETPOST

的問題是當我發送包含值如Älypuhelimen lisävarusteet的查詢字符串時,數據庫中的結果爲�lypuhelimen lis�varusteet

數據庫連接歸類爲utf-8,這工作正常,當我不使用ajax發佈和保存到數據庫...這絕對是阿賈克斯搞砸了編碼...

我也嘗試使用encodeURIComponent()函數數據,並將其變成%C4lypuhelimen%20lis%E4varusteet,如果我使用它...這同樣適用於escape()函數...

任何幫助將不勝感激......

+0

對不起你們!問題是後數據本身... postData被解析的函數使用escape()到url轉義所有查詢變量...使用encodeURIComponent()而不是escape()修復了問題... –

回答

0

只爲信息和幫助其他人可能屬於同樣的情況......

的問題是與POSTDATA本身......有人分析,從而應用於每一個崗位變量與escape()...使用encodeURIComponent()而不是escape()工作!

摘要: DONOT使用escape()函數來網址,逃避查詢組件...使用encodeURIComponent方法(),而不是...

0

嘗試在數據庫中更改列utf16_bin整理

發佈您的php數據庫連接代碼。

+0

The數據庫中的列是utf8,它與發送的數據相同...還值得注意的是,如果沒有ajax調用...相同的js/form/php代碼將數據完美保存在數據庫中...因此它不是數據庫整理或連接整理... –

+0

檢查您的php文件是否在utf-8中,並且與數據庫的連接是使用utf-8字符集。數據庫已正確保存? –

+0

是的,我確定php文件發送utf-8頭文件和數據庫,它的連接排序都是utf-8 ...事實上,正如我之前所說的...如果我不使用ajax ..字符串保存完全正確在數據庫中,甚至顯示完美的我的PHP生成的HTML輸出頁面... ... - 這確認了在ajax調用過程中有什麼東西被混淆了...... –

1

你應該試試jQuery Base64編碼。

的JavaScript:

<script src="jquery.min.js"></script> 
<script src="jquery.base64.min.js"></script> 
<script> 
    enctext = $.base64.encode("yourtext"); 
    //your ajax code goes here. 
</script> 

PHP:

<?php 
    $org_text = base64_decode($_POST['your_variable']); 
?> 

的jQuery插件Base64編碼。

從這裏下載。

https://github.com/carlo/jquery-base64

+0

這意味着我將不得不base64_encode在JS中的所有POST變量和base64_decode所有這些變量在PHP中......這是不實際的,因爲相同的PHP用於ajax和正常的兩個調用...還有base64_encode有時會破壞數據... –