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">.
  • 用于 ajax 的后端 PHP 脚本用于json_encode()属性名称数组。
  • 用来error_log()存储json_encode()我得到的结果,[{"value":"Bill&#39;s Apartments"}]
  • 使用console.log(data)节目Bill&#39;s Apartments
  • 直接在浏览器中访问 PHP Ajax 脚本?term=bi并附加到路径返回[{"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 );
4

1 回答 1

1

听起来您正在将编码数据直接传递给您的函数。浏览器正在请求并被发送 json 数据。换句话说,浏览器不会将您的数据解析为 html。

我建议尝试像这样 $(#some_div>.html(returned data from ajax call); 然后将自动完成设置为源 some_div 注意:jQuery .html 函数将取消编码您的数据。

或者在这里使用一个自定义转换函数,比如 htmlUnescape https://stackoverflow.com/a/7124052/2478282

于 2013-06-12T15:32:39.573 回答