我有一个PHP脚本,用于查询数据库并将json_encoded数据返回到javascript / jquery文件,该文件将返回的数据处理为下拉选择框中的动态选项。
这一直很好。最近在我们的数据库中的字段中添加了&符号:ereqs.sub_account_code - > '&HD功放; NO'导致在加载页面时通过FireBug查看语法错误。当下面的查询返回此值时,jquery / js错误会中断响应,并且没有值会添加到选择框中的选项中。
错误:语法错误,无法识别的表达式:#sub_account1选项[value = HD& NO]
javascript文件:(json call)
function get_sub_account_codes(instance, code){
// json call to get sub-account-codes.
$.getJSON("get-sub-account-codes.html",{code:code}, function(data){
// empty html drop-down of options that may be showing
$('#sub_account' + instance).html(''); // .empty()
$('#sub_account' + instance).val('');
// build the drop-down options
$.each(data, function(key, value){
$("#sub_account" + instance).append("<option value=\""+value.SUB_ACCOUNT_CODE+"\">"+value.SUB_ACCOUNT_CODE+"-"+value.SUB_ACCOUNT_NAME+"</option>");
});
});
}
get-sub-account-codes.html用于获取数据的PHP代码。从js文件调用
$data = array();
$dbh = SHA_DB::getConnection('webadmin');
$sql = "select distinct sub_account_code, sub_account_name
from ereqs.kuali_account_codes
where account_code = upper(?) and
sub_account_code is not null
order by sub_account_code";
$results = $dbh->queryChecked($sql, array($code));
while($d = $results->fetchRow(DB_FETCHMODE_ASSOC))
{
$data[] = $d;
}
# return json encoded string.
print json_encode($data);
去除&符号&amp;&#39;不是一个可行的选择。
有没有办法检查&amp;在PHP文件中以及在json_encode($data)
中发回之前以某种方式将其转义?或者应该在javascript代码中检查和更改?
感谢您的任何提示。
答案 0 :(得分:1)
要防止出现错误,您需要将属性选择器的值包装在引号中:
$('#sub_account1 option[value="HD&NO"]');
或者您需要使用&
转义特殊字符,在本例中为\\
:
$('#sub_account1 option[value=HD\\&NO]');