0

Jquery アプリケーションを介してデータを db に渡そうとしています。エンコーディングに重大な問題があります。

現在のページ エンコーディングは iso-8859-9 です。ajax ページのエンコードを iso-8859-9 にし、.ajax データをcontentType: "application/x-www-form-urlencoded;charset=ISO-8859-9"

試行ごとにİZİN値を保存します。İZİN

PHP ページを作成し、ヘッダーでエンコーディングを設定しても機能しますか?

PS: HTML ページのデータを処理しています。プロセッサ ページは ASP ページであり、MsSQL db を使用していると思います。プロセッサ ページまたはデータベースへのアクセス権がありません。フォームポストからデータを入力するだけです。

İZİN word および他の類似の単語は、WHERE 句の他のページで SQL クエリに使用されています。そのため、文字を HTML コードに変換できません。İ を İ として使用する必要があります。

提案をありがとう!

4

1 に答える 1

2

にはapplication/x-www-form-urlencoded文字セットがありません。単純な ASCII 文字です。そこに文字セットを指定しても何も起こりません。

jQuery は通常、指定されたとおりにデータを urlencode します。

  1. UTF-8にエンコード
  2. パーセントエンコード

そう:

$.post( "test.php", {data: 'İZİN'}); //Shorthand for $.ajax

実際にこれをサーバーに投稿します:

data=%C4%B0Z%C4%B0N

$_POST['data']php でアクセスすると、バイト ( 0xC4B05AC4B04E) に変換されているため、エコーすると不正な形式のデータが返されます。

header("Content-Type: text/html; charset=ISO-8859-9");
echo $_POST['data'];
// İZİN

これが真であることを次の方法でテストできます。

header("Content-Type: text/html; charset=ISO-8859-9");
echo "\xC4\xB0\x5A\xC4\xB0\x4E";
// İZİN

PHP では、受け取ったらすぐに ISO-8859-9 に変換する必要があります。

<?php
header("Content-Type: text/html; charset=ISO-8859-9");
$data =  "\xC4\xB0\x5A\xC4\xB0\x4E"; //$_POST['data'];
$proper = mb_convert_encoding( $data, "ISO-8859-9", "UTF-8" );
echo $proper;
//İZİN

どこでも UTF-8 を使用する方がはるかに簡単であることに注意してください。これは、最も優れたエンコーディングであり、Web で好まれているためです。他のエンコーディングを使用する場合は、常に注意を払う必要があります。

于 2012-07-30T09:14:08.140 に答える