2010-06-27 52 views
0

我收到的法國字符看起來像這樣但卻是例如。 我正在使用jquery ajax和使用php的表單驗證,然後插入數據庫中, 我已經嘗試了很多東西,但似乎沒有任何東西擺脫了問題,我知道這是因爲jquery ajax,因爲如果我做一個簡單的插入數據庫只使用PHP eveything工作正常。

$(function(){ 
$('#submit_maj_password_email').click(function(){ 
var _data= $(this.form).serialize() 
//var encodedString = escape($("#email1").val()); 
alert(_data) 
    $.ajax({ 
     type: 'POST', 
     url: 'valid.php?var=maj_password_email', 
     beforeSend: function(){}, 
     data:_data, 
     cache: false, 
     success: function(html){ 
     $('div#error').html(html) 

     } 
    }) 
}) 

}) 

php文件:

<?php 
if($_POST and $_GET["var"]=="maj_password_email"){ 
extract($_POST); //we automatically extract $ variables 
...validation.... 
...insertion in db..... 
if($password!=="default" and password($password)==true){ 
    $query=mysql_query("UPDATE sdf_inemails SET emails_email='$email' , emails_password=md5('$password') WHERE emails_id = '".$_COOKIE['_ID']."'")or die(mysql_error()); 
//mail 
    } 
} 
?> 

似乎沒有任何工作的幫助。 Regards

+1

這是一個編碼問題。你的HTML頁面和數據庫連接使用什麼編碼?請注意,Ajax請求默認提供UTF-8數據,這可能是您的問題所在。 – 2010-06-27 12:19:17

+1

良好的(但廣泛的)閱讀理解編碼:http://www.joelonsoftware.com/articles/Unicode.html – 2010-06-27 12:19:47

+0

該數據庫具有默認的SQL字符集「拉丁語瑞典ci」我也試過用jQuery的ajax contentType選項,但我仍然得到相同的錯誤,網頁charset = iso-8859-1。 – tetris 2010-06-27 12:30:52

回答

3

就像Pekka所說的,AJAX請求默認提供UTF-8數據。

當你提取$ _ POST變量的數據,你必須使用utf8_decode,就像這樣:

$email = utf8_decode($_POST["txtEmail"]); 

然後將其保存到數據庫中。

您也不能忘記在PHP和HTML頁面中設置正確的標頭。

例HTML:

<?xml version="1.0" encoding="ISO-8859-1"?> 

例PHP:

<?php header("Content-Type: text/html; charset=ISO-8859-1",true); ?> 
0

爲您的數據庫表和每個包含法語數據的字段設置編碼類型。 最有可能的是ISO-8859-1將是法語的正確編碼類型。

編輯

把回聲在服務器腳本保存之前驗證數據。那麼你可以找出問題的起點。

<?php 

$sql = "INSERT INTO {$TABLE} xxxxxx"; 
echo $sql; 
+1

現在,UTF-8確實是每種語言的正確編碼。 – 2010-06-27 12:31:18

+0

它看起來不像是數據庫的問題,正如我所說的,當不通過ajax法語字符顯示正確時,並且數據庫中的字符集是默認的「拉丁語瑞典語ci」 – tetris 2010-06-27 12:41:51

+0

@tada。您可以在保存記錄之前在服務器腳本中放入回顯。以便您可以驗證數據格式是否正確。例如, 。 echo $ SQL; – BlueBird 2010-06-27 12:52:48