jquery otomatik tamamlama etiketleri kullanarak utf-8 sorunu

4 Cevap php

hey arkadaşları. Son zamanlarda i jquery otomatik tamamlama etiketi kullanılır

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

Her şey utf-8 etiketi düşündüren dışında güzel gider, sadece İngilizce etiketleri önerilmektedir

i guess something goes wrong with script lines it works fine with English tags but not with multi byte languages like Persian

4 Cevap

Muhtemelen çizgi TextboxList.Autocomplete.js 212 sorumlu olduğu:

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

Bu kelime sınırından sonra verilen karakteri arıyor. Ama sözcük sınırları kelimesinin karakter tanıma bağlıdır, ve kelime karakter JavaScript Regexp listesinde sadece ASCII alphanumerics artı _ olduğunu. RegExp Unicode hakkında hiçbir şey bilmiyor, çünkü kelime olmayan bir ASCII karakter ile başladığı bu iş olmaz.

Bunu kelimelerin başında değil, her yerde içine verilen dize herhangi bir öneri maç hangi durumda \\b kurtulmak deneyebilirsiniz.

HTTP başlık yanlış. Bu olmalıdır:

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

Ayrıca kodu kısaltmak ve MySQL ile sıralama yapabilirsiniz:

$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);

Sizin içerik türü başlığı biraz yanlış. İlk olarak, diğer bir deyişle, content-type:text/html; charset=utf-8, content-type:something; charset=something olmalıdır.

Ama aslında application/json, burada gördüğünüz içerik türünü kullanmak için önerilmektedir http://stackoverflow.com/questions/477816/the-right-json-content-type

Yani, bu gibi yapabilirdik

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

Muhtemelen çizgi TextboxList.Autocomplete.js 215 sorumlu olduğu:

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

için gizli

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

Bobince (ilk cevap) sağ, sorun 212 hattı olduğunu, ancak bu hattı 215 olabilir çözüldü