我在文本输入上设置了jQuery自动完成功能,并且没有从'
转换撇号,这是它们存储在数据库中的方式。
自动填充下拉列表显示Bill's Apartments
而不是Bill's Apartments
。
根据我的理解,浏览器会将'
转换为撇号,'
。
数据是否经过双重编码? jQuery是否通过$.ajax
对它接收的数据进行编码?这似乎是撇号已经编码的情况。 jQuery必须编码&符号吗?
UTF-8 Encoding
保存文件。UTF-8 Unicode (utf8)
utf8_general_ci
。<meta charset="utf-8">
。json_encode()
。error_log()
存储json_encode()
我得到的结果,[{"value":"Bill's Apartments"}]
console.log(data)
显示Bill's Apartments
。?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 );
答案 0 :(得分:1)
听起来您将编码数据直接传递给您的函数。 浏览器正在请求并发送json数据。 换句话说,浏览器不会将您的数据解析为html。
我建议尝试这样的事情 $(#some_div&gt; .html(从ajax调用返回的数据); 然后将自动完成设置为源some_div 注意:jQuery .html函数将取消对您的数据进行编码。
或者在这里使用像htmlUnescape这样的自定义转换功能 https://stackoverflow.com/a/7124052/2478282