2011-09-20 21 views
5

これは問題です:jQuery ajax特殊文字の問題

私は自分のPHPページにフォームを持っています。ユーザーが名前を入力すると、press(submitボタンのjQueryクリックイベント)は、情報を収集し、$ .ajax()を通してそれらを渡します。

$.ajax({ 
    url: "ajax/addGatheringSignup.php", 
    type: "POST", 
    async: true, 
    dataType: 'json', 
    data: { 
     "id":   $_GET['id'], 
     "name":   $signupNameInput.val() 
    }, 
    success: function(jsonData){ 
     if(jsonData[0].feedback == "ok"){ 
      $signupForm = $('#singupform'); 
      $signupForm.html('Signup successful!'); 
     }else{ 
      Alert(jsonData[0].feedback); 
     } 
    }, 
    error: function(){ 
     Alert("error alert"); 
    } 
}); 

「名前」フィールドは名前入力フィールドの値です。しかし、私は私のPHPページ(私はテキスト内の何かを書いていない)私のMySqlデータベース内の完全にガベージに提出するとき。現時点では、デンマークの文字æ、ø、åを手に入れようとしています。

Atm私のmysqlデータベースがUTF-8を使用していて、私のindex.phpのメタヘッダーがこのようになっていることは知っています(すべてのページはindex.phpページから生成されます... ex index.php?page = random ):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

しかし、nothingsが動作します。私が投稿するとき: "æÆ-øØ-åÅ"をデータベースに保存します: "Ã|Æâ-¸Ã~-ãÃ..."。 誰も私が何をしなければならないか知っていますか?

EDIT 1:

私は私が間違っているだけでなく(上記のコードの行13)にディスプレイを$ signupFormを設定し、HTMLを提出成功AJAXでそれを見ることができますが(それは通常、いくつかのデンマーク語の単語のWHERE I )言及したデンマークの文字を書く

EDIT 2()は一つの解を見つけた:

私は方法を見つけました。 $ .ajax()はjQueryの文書に従って、常にデータをUTF8として解析します。私はなぜこれが私のコードを混乱させるのかわかりませんが、* utf8_decode($ name)*を追加すると、正しく解析されました(私のcharsetは何とかISO-8859-1に設定されているはずですか? )。これは、以前のcharset ISO-8859-1を元に戻して、すべてのutf8_encode()関数を削除することができたので、簡単になりました。

私の最後の問題は、「EDIT 1」で発表された問題でした。

function decode_utf8(s){ 
    return decodeURIComponent(escape(s)); 
} 

答えて

2

問題は、データベース接続であるかもしれない:ここで私は(再びので、()$アヤックスの)UTF8文字列を変換する方法についての解決策を見つけました。それは与えられた文字セットでも通信しています。

mysql_set_charset()を参照してください。

+0

私はまだそれに取り組んで、ちょうど私が "æÆøØåÅ"をSQL文に追加すると、それでも間違って表示されることがわかりました。そう、それはデータベースです。しかし、私のメタヘッダーでUTF-8を使用しているときに、どのような文字セットを設定する必要がありますか?ちょうど「UTF-8」ですか? –

+0

そうだと思います。私は通常照合のためにUTF8-Unicodeを使用します。 – Rijk

+0

phpmyadminを介して私のDBをJusted chekc:MySQLの文字セット:UTF-8 Unicode(utf8)そうではない:S –

0

混在したエンコードタイプがあるように聞こえますが、わかりません。

UTF-8として送信されますが、入力がISO-8859-1に変換され、mysql UTF-8エンコードテーブルに格納されるページは失敗します。

phpとexternalの内部で使用するように選択したエンコーディングのタイプに関連して、入力エコータイプを制御する必要があります。

これが役立つかどうかを確認してください。

  1. PHP messing with HTML Charset Encoding
  2. http://www.tanzilo.com/2008/12/29/php-mysql-creating-a-website-in-your-local-language-smoothly/
2

(データベースへの書き込み)お使いのPHPスクリプトで、次の操作を実行する必要があるので、アヤックス-POSTのデータは、UTF8でエンコードされています:

$name = utf8_decode($_POST['name']); 

あなたの代わりにæÆ-øØ-åÅ不正な形式のASCIIのæÆ-øØ-åÅとしてæÆ-øØ-åÅを保存することができますこの方法また、あなたのデータベースには、(例えばlatin1_swedish_ci用)適切な照合

-1
function decode_utf8(s){ 
    return decodeURIComponent(escape(s)); 
} 

にする必要があります良い短い形式は、それがで「ISO 8859-1文字の問題を解決します

Name = decodeURIComponent(escape(Name)); 

ある 素晴らしいですajaxレスポンス

関連する問題