2013-06-12 54 views
1

我有一个文本输入jQuery自动完成设置和撇号不是从'这是它们如何存储在数据库中转换。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"}]
  • 使用PHP函数,如html_entity_decode()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); 

回答

1

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

我建议尝试要么像这样 $(#some_div>的.html(返回从AJAX调用数据); 然后设置自动完成取源some_div 注:jQuery的html的功能将unencode您的数据。

可以使用自定义转换功能,喜欢这里 https://stackoverflow.com/a/7124052/2478282

+0

这个htmlUnescape因为我经过编码的数据目录到我的功能,它被动态地添加到页面,并在浏览器没有机会将编码解析成它代表的内容?我想这就是我要问的。 – hungerstar

+0

浏览器将尝试解码html,而不是javascript。然而,一些jquery函数,例如html(),也会解码html,但自动完成不是其中之一。 – DavidW

+0

好的。如果你可以编辑你的答案,并添加到它,以便解释为什么编码的字符不被浏览器解码,那么我认为这将满足我的问题,我会接受你的答案。 – hungerstar