我在我的应用程序中使用了 jQuery DataTables 插件,其中许多表行和过滤器都包含特殊字符,尤其是 &。 当我尝试在这些列上进行筛选时,所有记录都会消失,并显示“未找到匹配的记录”。
我已经尝试对字符串进行编码(即htmlspecialchars)和解码(即htmlspecialchars_decode),但似乎都不起作用。
示例:http://jsfiddle.net/gkdcZ/3/
有什么想法为什么会发生这种情况,以及我该如何解决?
HTML:
<select id="filter_col_1" name="filter_col_1">
<option value="">Select</option>
<option value="A&B">A&B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<tr>
<td>A&B</td>
<td>Jones, Brandon</td>
<td>01/02/2003</td>
</tr>
JavaScript:
$("#filter_col_1").change( function() {
$('#results').dataTable().fnFilter(
'\\b' + $("#filter_col_1").val() + '\\b',
1,
true,
false
);
} );
更新 #1: 问题似乎只在限制列数时发生。请参见DataTables API。当参数设置为“null”时,正常工作。http://jsfiddle.net/gkdcZ/4/
更新 #2: 有所进展。添加一个替换HTML实体的函数可以处理某些字符(如“&”),但无法处理其他字符(如感叹号和问号)。请参见http://jsfiddle.net/cz6Bs/4/
'\\b' + htmlEntities($('#filter_col_1').val()) + '\\b'
function htmlEntities(str) {
return String(str).replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"');
}
null, false );
- Daniel