1

テキスト入力で jQuery オートコンプリートを設定しましたが、アポストロフィが'データベースに保存される方法から変換されていません。

Bill's Apartmentsの代わりにオートコンプリート ドロップダウンが表示されますBill's Apartments

私の理解では、ブラウザは'アポストロフィに変換され、'.

データが二重にエンコードされていませんか? 経由で受信しているデータをjQueryでエンコードしてい$.ajaxますか? アポストロフィはすでにエンコードされているため、これはそのようです。jQueryはアンパサンドをエンコードする必要がありますか?

  • でファイルを保存していますUTF-8 Encoding
  • MySQL 文字セット:UTF-8 Unicode (utf8)
  • データベース照合utf8_general_ci
  • HTML 5 でのメタ タグの使用、<meta charset="utf-8">.
  • json_encode()プロパティ名の配列で使用する ajax 用のバックエンド PHP スクリプト。
  • I geterror_log()の結果を保存するために使用し、json_encode()[{"value":"Bill&#39;s Apartments"}]
  • console.log(data)ショーの使用Bill&#39;s Apartments
  • ?term=biパスに追加してブラウザで PHP Ajax スクリプトに直接アクセスすると、[{"value":"Bill's Apartments"}].
  • html_entity_decode()またはのようなPHP関数を使用しても機能htmlspecialchars()しないか、適切な解決策のようです。

HTML

<input type="text" id="property-name" name="property-name" value="">

jQuery

$('#property-name').autocomplete({
     source: function(request, response) { 
          $.ajax({
               url : ABSPATH + 'includes/ajax/property-name-search.php',
               dataType : "json",
               data : request,
               success : function(data) {
                   response(data);
               }
          });
     },
     max: 25,
     minLength: 2
});

簡素化されたバックエンド PHP

$query = "SELECT `property_name`
          FROM `property_name_table`
          WHERE `property_name` LIKE '%name%'";

$result = $mysqli->query( $query );

while ( $row = $result->fetch_object() ) :
     $property_names[] = array( 'value' => $row->property_name );
endwhile;

echo json_encode( $property_names );
4

1 に答える 1