我做了阿賈克斯的腳本簡單地從MySQL中恢復數據,並還給了PHP時選擇的選項被改爲:PHP不receveing帶重音符號的字符從阿賈克斯
$country = $_POST['country'];
$sql = "SELECT id,name FROM regions WHERE idcountry='$country' ORDER BY name ASC";
$result = mysqli_query($connexion->db, $sql);
$count_row = $result->num_rows;
$regions_arr = array();
while($row = mysqli_fetch_array($result)){
$idregion = $row['id'];
$nameregion = htmlentities($row['name']);
$regions_arr[] = array("id" => $idregion, "name" => $nameregion);
}
// encoding array to json format
echo json_encode($regions_arr);
而在我的PHP頁面我有這個腳本:
<script>
$(document).ready(function(){
$("#sel_country").change(function(){
var countryid = $(this).val();
$.ajax({
url: '/include/ajax/getRegions.php',
type: 'POST',
data: {country:countryid},
dataType: 'json',
success:function(response){
var len = response.length;
$("#sel_region").empty();
for(var i = 0; i<len; i++){
var id = response[i]['id'];
var name = response[i]['name'];
$("#sel_region").append("<option value='"+id+"'>"+name+"</option>");
}
}
});
});
});
</script>
一切工作的就是有,除了一些有特殊字符,例如「日內瓦」或「蘇黎世」恢復的名字。這些值完全沒有顯示出來,我的選項對於id有正確的值,但在名稱中看起來是空的。
我搜索了,我嘗試了uriencode,但它似乎並沒有改變,任何想法如何解決這個問題? 謝謝!
ALTER TABLE
`table_name`
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
然後在我的腳本阿賈克斯我添加了這個:
更新和解決方案
我改變我的表以這種方式utf8m64(每個表)解決了這個
mysqli_set_charset($link, 'utf8mb4');
然後它終於起作用:)
你的sql代碼容易受到注入攻擊。您應該使用參數化查詢和準備語句來保護您的數據免受可能輕易竊取,損壞或刪除數據的攻擊。請參閱http://bobby-tables.com/瞭解該主題的介紹以及使用參數化查詢的一些示例,其中包括針對具體問題的PHP – ADyson
。你的數據庫和你的頁面使用什麼編碼?如果在兩種情況下都不是utf-8,那麼你應該。你也可以嘗試在你的響應中設置content-type頭來使用''application/json;字符集= UTF-8''。其中一個或多個人應該有希望解決這個問題。 – ADyson
我在數據庫中的enconding是latin1_swedish_ci,在我的頁面中是utf8。我嘗試過腳本類型=「應用程序/ json」,但它不起作用 – Ame