jquery自动完成字符编码

时间:2013-06-12 02:37:12

标签: php jquery-ui jquery character-encoding escaping

我在文本输入上设置了jQuery自动完成功能,并且没有从'转换撇号,这是它们存储在数据库中的方式。

自动填充下拉列表显示Bill's Apartments而不是Bill's Apartments

根据我的理解,浏览器会将'转换为撇号,'

数据是否经过双重编码? jQuery是否通过$.ajax对它接收的数据进行编码?这似乎是撇号已经编码的情况。 jQuery必须编码&符号吗?

  • 我用UTF-8 Encoding保存文件。
  • MySQL charset: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 );

1 个答案:

答案 0 :(得分:1)

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

我建议尝试这样的事情 $(#some_div&gt; .html(从ajax调用返回的数据); 然后将自动完成设置为源some_div 注意:jQuery .html函数将取消对您的数据进行编码。

或者在这里使用像htmlUnescape这样的自定义转换功能 https://stackoverflow.com/a/7124052/2478282