60

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

これを行うために使用している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>列が次の行に折り返されるのはなぜですか?

乾杯

4

23 に答える 23

67

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'); ?>
于 2009-02-16T15:04:47.060 に答える
26

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

EDIT
[テストファイルのアーカイブコピー。]あなたのデータで

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

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

于 2009-02-16T14:33:50.457 に答える
20
$str=iconv("windows-1250","UTF-8",$str);

最終的に私を助けたもの

于 2010-01-25T07:15:06.100 に答える
10

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

この線が見えます

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

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

于 2009-02-16T14:53:27.930 に答える
8

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

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

var encodedString = escape($("#myFormFieldID").val());
于 2010-05-11T23:42:25.933 に答える
7

私のPHPアプリケーションの場合、解決策は、各変数 get in に utf8_decode 関数を含めることでした$_POST

例: (サーバー側)

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

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

于 2011-02-10T01:15:05.140 に答える
6

ajaxファイルの変数を出力する場合。置く

htmlentities()

それらの周りで、それが機能するかどうかを確認します。アイスランドのajaxアプリケーションで私のために働いた。

于 2009-02-16T15:00:14.590 に答える
4

私は、スペイン語ポータルのコンテンツ コメント システムで作業していて、同様の問題を抱えていました。最終的に私の問題を解決したのは、何時間もの検索の後、何があってもutf-8を使用しているように見えるjQuery文字セットをいじる代わりに、処理したPHPでutf-8からISO-8859-1にデコードすることでしたajax POST。PHP には組み込み関数 がある utf8_decode()ため、コメント文字列に対して最初に行うことは次のとおりです。

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

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

幸運と平和を全身に!セバ

于 2010-06-03T23:15:28.273 に答える
4

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

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

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

url: "/set_comment.do?text=" + encodeURIComponent(comment),
于 2012-02-26T13:24:26.537 に答える
3

私はこの問題をいじくり回していて、この解決策がFirefoxとsafariで機能することを発見しました(はい、現時点ではMacを使用しています)。

リクエストを受け取ったとき、私はここで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で機能しないことを知ったら教えてください。

于 2010-06-23T11:36:09.277 に答える
3

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

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

Response.Charset = "windows-1252"

文字セットが定義されていない前の私のaspページで、ファイルをANSIエンコーディングで保存しました(テキストエディターをメモ帳++として使用)

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

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

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

于 2011-05-15T22:01:15.360 に答える
2

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

 $.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);
        }
    });

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

于 2013-09-10T20:17:19.783 に答える
1
<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ページ。私は自分の問題を解決するためにこれを行いました:

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

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}
于 2011-06-08T17:55:49.810 に答える
1

すべてが UTF-8 でなければならないことに同意しません。ISO 8859 で完全に動作させることができます。私はそうしました。ここで私の回答を読んでください。

スタックオーバーフローでの私の応答

于 2009-08-04T18:12:10.673 に答える
0

同様の問題がありました。フランス語のテキストを含む 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 データで変更しても、問題なく動作します。

タレク

于 2016-11-04T18:32:59.840 に答える
0

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

詳細については、 encodeUIComponentおよびエスケープを参照してください。

于 2011-03-23T12:09:13.100 に答える
0

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

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

すべての文字が正しいように見えることがわかります

于 2012-05-21T08:02:21.643 に答える
0

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

  • 通常呼び出しで正常に表示される
  • ajaxリクエストを介して呼び出されたときに特殊文字が台無しになる

問題を解決するために (php を使用)、ソース データに対してutf8_encode()orを使用しました。htmlentities()どちらも機能し、さまざまなプロジェクトで使用しました。

于 2009-02-16T15:13:30.657 に答える
0

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

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

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

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

于 2013-08-11T15:31:04.043 に答える
0

に変更さ{"type":"GET"}{"type":"POST"}、魅力のように機能しましたISO-8859-1

于 2010-11-05T18:06:49.760 に答える
0

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

だから今、私はすでに長い回答のリストに追加しています。これは、私のようなエンコードの問題を解決した独自のソリューションです。

やったことはたったの2つ。私が追加したデータベース接続スクリプトで:

mysql_set_charset('utf8',$connection);

それとは別に:

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

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

于 2012-07-07T18:27:23.100 に答える