web-dev-qa-db-ja.com

jQuery AJAX文字エンコード

現在、フランスのウェブサイトをコーディングしています。スケジュールページがあり、ここにあるリンクを使用して別の日のスケジュールを読み込むことができます。

これを行うために使用しているJSは次のとおりです。

    <script type="text/javascript">
    function load(y) {
        $.get(y,function(d) {
            $("#replace").html(d);
            mod();
        });
    }
    function mod() {
        $("#dates a").click(function() {
            y = $(this).attr("href");
            load(y);
            return false;
        });
    }
    mod();
    </script>

実際のAJAXは、チャームのように機能します。私の問題は、リクエストへの応答にあります。

フランスのウェブサイトであるため、多くのアクセント文字があります。その理由から、ISO-8859-15文字セットを使用しています。ただし、私のAJAXリクエストへの応答では、文字エンコードがUTF-8に戻されるように見えるため、アクセントが?になります。

これを回避するにはどうすればよいですか?文字セットを設定するために、要求されたドキュメントの先頭にいくつかのPHPを追加しようとしています。

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

しかし、それでもうまくいかないようです。何かご意見は?

また、ここであなたが探している間...新しいページがロードされたときに右端の列が小さくなり、テーブルが歪んで<li>内の各<td>が折り返される理由次の行?

乾杯

57
Salty

UTF-8は、すべてのアクセントと外国語の文字を処理することになっています-データソースでUTF-8を使用してみませんか?

編集
[ テストファイルのコピーをアーカイブします。 ]データと共に

最初はすべてがUTF-8である必要があります。 notepad ++でファイルをロードし、utf-8に変換し、必要なアクセントに文字を手動で変更しました。一度完了すると、すべてが魅力のように機能します。

ところで、サーバーがphp-process .htmlファイルに定義されていない限り、ajaxで読み込んでいるファイルはiso文字セットを取得していません。 iso文字セットの使用を主張する場合は、htmlファイルではなくphpファイルを要求し、文字セットを(ファイル自体ではなく)ヘッダーで定義します

23
yoavf

AJAX呼び出しでコンテンツタイプを指定すると、ノルウェーのサイトでの問題が解決しました。

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
});

サーバー上の文字セットも指定する必要があります。

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
63
Magnar
$str=iconv("windows-1250","UTF-8",$str);

最終的に私を助けたもの

19
anony

文字エンコードとしてISO-8859-15を使用するようにサーバーをセットアップする必要があります(適切なHTTPヘッダーを追加します)。 HTMLの本文でそれを行うことは役に立ちません。

この行が見えます

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>

htmlのソースで。これは起こらないはずです。ライブHTTPヘッダーを使用すると、適切な文字セットHTTPヘッダーが表示されません。最初のページとajaxサービスの両方に使用します。

10
kgiannakakis

私のPHPアプリケーションの解決策は、$_POSTで取得する各変数のutf8_decode関数を含めることでした。

例:(サーバー側)

if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){
$variable = htmlentities($_POST['variable']); // wrong
$variable = htmlentities( utf8_decode($_POST['variable']) ); // right
}

アブラソス!!! (バイバイ!!!)

JavaScriptのescape()メソッドの使用を強くお勧めします

次のようにフォーム値を取得することで、jQueryでこれを使用できます。

var encodedString = escape($("#myFormFieldID").val());
7
Doug

Ajaxファイルの変数を出力するとき。置く

htmlentities()

それらの周りで、動作するかどうかを確認します。アイスランドのajaxアプリケーションで働いていました。

6
Ólafur Waage

スペイン語ポータルのコンテンツコメントシステムで働いていて、同様の問題を抱えていました。 jQuery charsetをいじるのではなく、何時間も検索した後、最終的に私の問題を解決したのは、utf-8を使用しても、PHP ajax POSTを処理しました。 PHPには組み込み関数utf8_decode()があるため、コメント文字列で最初に行うことは次のとおりです。

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

(そして、特別な文字の代わりにhtmlエンティティで保存されるテキストを準備するために、nl2br()およびhtmlentities() PHP関数を使用しました)

すべての幸運と平和!セバ

4

私はこの問題をいじくり回しており、このソリューションがFirefoxおよびsafariで機能することを発見しました(はい、現時点ではMacでimです)。

リクエストを取得するときに、ここでcontent-type = iso-8859-1を作成しました。

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
  httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1');
        }
    }

誰かがこれがIEで動作しないことがわかった場合、教えてください。

3
Kyuss

スウェーデン語/ノルウェー語の文字が疑問符として表示される問題がありましたが、次のように指定しています:

contentType: "application/json; charset=utf-8",

これは、文字列にencodeURIComponentを追加することで解決しました。

url: "/set_comment.do?text=" + encodeURIComponent(comment),
3
yngling

私のページでASPで同様の問題が発生しました。私はそう解決しました:

1)Jquery ajaxメソッドによって呼び出されるASPファイルの先頭に命令を挿入します。

Response.Charset = "windows-1252"

文字セットが定義されておらず、ANSIエンコーディングでファイルを保存していた前のASPページで(notepad ++のようなテキストエディタで)

2)jquery ajaxメソッドを使用してASPファイルを呼び出すhtmlファイルに、以下に示すパラメーターcontent-typeを挿入しました。

$.ajax({         
data: parameters,         
type: "POST",         
url: ajax_url,
datatype: 'html',         
contentType: "text/html;charset=windows-1252",

簡単に言うと、charsetと呼ばれるASPファイルで定義することが重要です。奇妙なことに、jqueryはwindows-1252で動作しますが、ISO-8859-1文字セットでは動作しません。この場合、jquery ajaxメソッドは例外を発生させます。

3
Rob

ドイツ語の特殊文字(ä、ö、ü)を含むテキストファイルを読むために、多くの提案を試みました。最終的には:

 $.ajax({
        async:false,
        type: "GET",
        url: "data/FileName.txt",
        dataType: "text",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function (data) {
           alert(data);
        }
    });

特殊文字で読みましょう。ただし、明示的にTF-8形式で保存されたFileName.txtの後でのみです。 Windowsエディターでテキストファイルを保存するための標準形式はANSIではなくTF-8、ですが、「名前を付けて保存」してドロップボックスを使用すると変更できます[保存]ボタンの横にあるか、より良いエディターを使用して開始します。

2
jank

すべてがUTF-8でなければならないことに同意しません。ISO8859で完全に機能させることができます。回答をここで読んでください。

stackoverflowでの私の応答

1
Rodrigo Asensio
<script type="text/javascript">
  function GetContent(idUser){ 
    $.ajaxSetup({
      url: 'ping.php'
    });

    $.ajax({
      type: "POST",
      url: "blablabla.php",
      dataType: "text",
      data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
      success: function(html) {
        $('#user_specified_content').html(html);
      }
    });     
  }
</script> 

これは、blabla.phpページからコンテンツを取得するスクリプトです。

成功に関するデータを受け取っても、アクセントは表示されません。

.success関数から取得したデータにアクセントを付けてデータを取得するための独自の非常に優れた実用的なソリューションを見つけました

私のblablaページで。私は私の問題の解決策をもたらすためにこれをしました:

Phpファイルでutf8_encode(place your data here)を使用しています。以下の動作をご覧ください。

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}
1
classics40

同様の問題がありました。フランス語のテキストを含むJSONデータを含むテキストファイルがあります。一部のキャラクターの表示には常に問題がありました。私の場合、JavaScriptプログラムは次のようにAjaxを使用してjsonテキストファイルを取得します。

$.ajax({
    async: false,
    type: 'GET',
    url: 'some-url',
    success: function(data, status) {
        mainController.constructionStageMaster = data.records;
     }
});

返されるデータには、常に誤ったアクセント付きのフランス語の文字が含まれていました。

Jsonテキストは次のようになります。

{
    "records": [
        {
            "StageDesc": "Excavation, Fondation et Bases",
            "Allowed": 9,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Étanchement et Remblayage",
            "Allowed": 3,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Encadrement et revêtement mural intermédiaire",
            "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
            "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
            "Allowed": 15,
            "Completed": 0,
            "TotalCompleted": ""
        }
        ...
    ]
}

上記のサンプルデータの3番目の要素に注意してください。正しいéと不正なêのフランス語アクセント文字を使用してテキストを配置しました。

参考までに、ISO-8859-1文字エンコーディングを使用したEclipseプロジェクトのグローバル構成がいくつかあるように思われました。あなたの場合、異なるエンコーディングかもしれません。

上記の解決策を確認し、プロジェクトで遊んだ後、これが私の問題を解決したものです。

  • フランス語のテキストが正しく表示されているテキストのソースを見つけます
  • テキストをコピーする
  • Eclipseに移動し、データを含むテキストファイルを開きます
  • エクスプローラーでファイルを右クリックしてプロパティを開き、エンコードをISO-8859-1に変更します
  • 適切に表示されるようにテキストを修正します。コピー/貼り付けまたはキーボードを使用します
  • キーボードの矢印キー(左/右)を使用して、変な形でHTMLに表示される原因となる隠し文字がないことを確認する必要があります。そのような隠された手紙を削除する
  • ファイルを保存する

さて、私の場合、Ajax呼び出しでエンコードオプションを指定しなかったため、正常に機能します。また、jsonデータを使用してテキストファイルのエンコードを変更しても、引き続き正常に機能します。

タレク

0
tarekahf

アプリケーション全体がISO-8859-1を使用している場合、encodeURIComponentのすべての出現をescapeに置き換えるjquery.jsを変更できます(現在のjqueryスクリプトには2つの置換があります-1.5.1 )

詳細については、 encodeUIComponent および escape を参照してください

0

CodeIgniterを使用している場合は、ビューを読み込む前にコントローラーに次のコードを追加することでこれを解決できます(構成でcharsetが適切に設定されている場合。_そうでない場合は、charset=whateveryouwant.

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));

私がやった方法は、その行をすべてのコントローラーのスーパークラスであるMY_Controllerのコンストラクターに追加することでした。これにより、どこにもエンコードの問題がないことを確認できます。

ところで、これはJSONリターン(UTF-8でエンコードされている)には影響しません。

0

次のページでも同じ問題が発生しました。

  • 正常に呼び出されたときに正常に表示される
  • Ajaxリクエストを介して呼び出されたときに、特殊文字がめちゃくちゃになる

(phpを使用して)問題を解決するために、ソースデータでutf8_encode()またはhtmlentities()を使用しました。両方とも機能し、私はそれらを異なるプロジェクトで使用しました。

0
jeroen

私は同じ問題に直面し、いくつかの方法を試しました。そして、私は解決策を見つけました。以下のように「Accept」のリクエストヘッダーを設定した場合;

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        dataType: 'json',
        beforeSend : function(xhr) {
            xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
        },
        success: callback
});

すべてのキャラクターが正しいように見えます

0
Hüseyin BABAL

$ .ajaxを使用してローカルのjson/textファイルを読み取ろうとしましたが、最初はエンコードが機能しませんでした。jsonファイルをUTF-8エンコードとして保存することで機能しました。これはWindowsのメモ帳で簡単に実行できます。「名前を付けて保存」を使用し、ファイル名の下でエンコードをUTF-8に設定できます。

幸運を!

0
doron

この質問には、質問者とまったく同じ問題がありました。ここでの回答は非常に有益であり、提案された回答のほぼすべてを試しました。ここでの答えはどれも私にとってはうまくいきませんでした-私の問題にはわずかな違いがあったかもしれません。そして、それは多くの場合に当てはまるようです。答えが出る前に、私はいろいろ試してみました。

だから今、私はすでに長い答えのリストに追加しています、私の種類のエンコーディングの問題を解決した独自の解決策。

私は2つのことをしました。データベース接続スクリプトに追加しました:

mysql_set_charset('utf8',$connection);

それとは別に:

  • すべてのファイルのエンコードをUTF-8に変更しました

ポイントは、すべてが同じエンコーディングである必要があるということです。また、新しいphp-filesを作成する場合、スクリプトの場合、スクリプトのエンコードを変更するだけでは十分ではありません。ファイル自体を正しくエンコードする必要があります。

0
Steeven

{"type":"GET"}{"type":"POST"}に変更し、ISO-8859-1でチャームのように機能しました

0
MauroPorras