1

バックエンドで jquery/ajax と PHP を使用してデータを投稿しています。問題は、「ジャックとジルが丘を登った」のようなものを入力すると、バックエンドに到達したときに「ジャック」しか受信しないことです。

そのデータが送信される前に、「ジャックとジルが丘を登った」というアラートのエラーをフロントエンドでスローしました。

die(print_r($_POST));インデックスページの一番上に置くと、[key] => Jack

どうすればデータを失うことができますか?

私はそれが私のフィルターだったのかもしれないと思った。

<?php

function filter( $data ) {
    $data = trim( htmlentities( strip_tags( mb_convert_encoding( $data, 'HTML-ENTITIES', "UTF-8") ) ) ); 
    if ( get_magic_quotes_gpc() ) { 
        $data = stripslashes( $data ); 
    } 
    //$data = mysql_real_escape_string( $data ); 
    return $data;
}

echo "<xmp>" . filter("you & me") . "</xmp>";

?>

you & meしかし、それは、追加した後に配置された上記のテストで問題なく返されdie(print_r($_POST));ます。

誰がどのように、なぜこれが起こっているのか考えられますか?

どんな助けでも大歓迎です。

4

4 に答える 4

2

ほとんどの場合、データの URL エンコードに失敗しています。この&文字は、送信されたフォーム データのキーと値のペアを区切ります。

これにはencodeURIComponentを使用します

于 2010-04-14T06:18:36.450 に答える
1

POST データは、URL の GET データと同様の形式で HTTP ヘッダーを介して送信されます。たとえば、データは次のようになりますvar1=value1&var2=value2&var3=value3。ご想像のとおり、データにアンパサンド自体が含まれている場合、その形式ではうまく機能しません。正確には、問題はデータの提出方法にあります。

投稿データ (または、さらに言えば URL) でアンパサンドを使用するには、"urlencoded" である必要があります。%26つまり、&文字に使用する必要があります。したがって、実際に問題があるのは PHP ではなく、データを送信しているものです。値を適切にエンコードしていません。

于 2010-04-14T06:20:16.277 に答える
0

javascript の最後で encode() または escape() のいずれかを使用します

于 2010-04-14T06:18:06.323 に答える
0

Javascript の最後では、 を使用する必要がありますescape()

PHP では、関数の名前はurlencode().

于 2010-04-14T06:21:43.683 に答える