簡體   English   中英

jQuery自動完成字符編碼

[英]jquery autocomplete character encoding

我在文本輸入上設置了jQuery自動完成設置,並且單引號未從'轉換而來' 它們是如何存儲在數據庫中的。

自動完成下拉菜單顯示Bill's Apartments而不是Bill's Apartments

據我了解,瀏覽器會轉換' 並加撇號, '

數據是否被雙重編碼? jQuery是否對通過$.ajax接收的數據進行編碼? 由於撇號已被編碼,因此似乎是這種情況。 jQuery是否必須對&符號進行編碼?

  • 我正在使用UTF-8 Encoding保存文件。
  • MySQL字元集: UTF-8 Unicode (utf8)
  • 數據庫整理utf8_general_ci
  • 在HTML 5中使用meta標簽, <meta charset="utf-8">
  • 用於ajax的后端PHP腳本在屬性名稱數組上使用json_encode()
  • 使用error_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()htmlspecialchars()類的PHP函數不起作用,或者似乎是正確的解決方案。

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 );

聽起來您是將編碼數據直接傳遞給函數。 瀏覽器正在請求並發送json數據。 換句話說,瀏覽器不會將您的數據解析為html。

我建議嘗試這樣的事情$(#some_div> .html(從ajax調用返回數據);),然后將自動完成設置為源some_div注意:jQuery .html函數將對數據進行未編碼。

或使用類似htmlUnescape這樣的自定義轉換功能,此處為https://stackoverflow.com/a/7124052/2478282

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM