Я использую плагин 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:
Проблема возникает только тогда, когда вы ограничиваете столбец. См. API DataTables . Работает нормально, когда параметр установлен на «ноль». 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, '"');
}