Проблема utf-8 в использовании тегов автозаполнения jquery - PullRequest
3 голосов
/ 24 января 2010

эй приятели. недавно я использовал тег автозаполнения jquery

http://devthought.com/projects/jquery/textboxlist/

все идет хорошо, кроме тега utf-8, предлагаются только английские теги

я думаю, что-то не так с строками скрипта он отлично работает с английскими тегами, но не с многобайтовыми языками, такими как персидский

Ответы [ 4 ]

3 голосов
/ 24 января 2010

Возможно виновата строка 212 в TextboxList.Autocomplete.js:

regexp = new RegExp('\\b' + escapeRegExp(search), insensitive ? 'i' : '');

Это ищет заданный символ после границы слова. Но границы слова зависят от распознавания символов слова, и список символов слова JavaScript в RegExp - это просто алфавитно-цифровые символы ASCII плюс _. Поскольку RegExp ничего не знает о Unicode, это не сработает, если слово начинается с символа, не являющегося ASCII.

Вы можете попытаться избавиться от \\b, и в этом случае оно будет соответствовать любому предложению с заданной строкой где угодно внутри, а не только в начале слов.

1 голос
/ 24 сентября 2011

Возможно виновата строка 215 в TextboxList.Autocomplete.js:

if (regexp.test(values[i][1])) newvals.push(values[i]);

скрыть его до

if (values[i][1].indexOf(escapeRegExp(search)) != -1) newvals.push(values[i]);

Bobince (первый ответ) верно, проблема в строке 212, но решена, она может быть в строке 215

1 голос
/ 24 января 2010

Ваш заголовок типа контента несколько неправильный. Во-первых, это должно быть content-type:something; charset=something, то есть content-type:text/html; charset=utf-8.

Но на самом деле предлагается использовать тип контента application/json, см. Здесь Какой тип контента JSON правильный?

Итак, вы можете сделать это так

header("Content-Type:application/json; charset=UTF-8");

1 голос
/ 24 января 2010

Ваш HTTP-заголовок неверен. Должно быть:

header('Content-Type: application/json; charset=UTF-8');

Вы также можете сократить свой код и выполнить сортировку с MySQL:

$sql = 'SELECT `tag` FROM `'.$prefix.'_tags` ORDER BY `tag`';
$result = $db->sql_query($sql);
if (!$result) {
    header($_SERVER['SERVER_PROTOCOL'].' 500 Internal Server Error');
    echo mysql_error();
    exit;
}

$response = array();
$i = 0;
while ($row = $db->sql_fetchrow($result)) {
    $response[] = array($i++, $row);
}
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($response);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...