Php jQuery自动完成特殊字符(挪威语)问题
我在挪威网站上使用jQuery的自动完成功能。当输入挪威字符æ、ø和å时,自动完成功能会提示具有相应字符的单词,但不会提示以相应字符开头的单词。似乎我必须设法在文字的中间编码挪威字符,而不是从字母开始的字符。 我正在使用一个PHP脚本和我自己的函数,将挪威字符编码为UTF-8并生成自动完成列表 这真令人沮丧 代码: PHP代码:Php jQuery自动完成特殊字符(挪威语)问题,php,javascript,jquery,Php,Javascript,Jquery,我在挪威网站上使用jQuery的自动完成功能。当输入挪威字符æ、ø和å时,自动完成功能会提示具有相应字符的单词,但不会提示以相应字符开头的单词。似乎我必须设法在文字的中间编码挪威字符,而不是从字母开始的字符。 我正在使用一个PHP脚本和我自己的函数,将挪威字符编码为UTF-8并生成自动完成列表 这真令人沮丧 代码: PHP代码: $q = strtolower($_REQUEST["q"]); if (!$q) return; function rewrite($string){ $to
$q = strtolower($_REQUEST["q"]);
if (!$q) return;
function rewrite($string){
$to = array('%E6','%F8','%E5','%F6','%EB','%E4','%C6','%D8','%C5','%C4','%D6','%CB', '%FC', '+', ' ');
$from = array('æ', 'ø', 'å', 'ä', 'ö', 'ë', 'æ', 'ø', 'å', 'ä', 'ö', 'ë', '-', '-');
$string = str_replace($from, $to, $string);
return $string;
}
$items
是一个包含建议词的数组
foreach ($items as $key=>$value) {
if (strpos(strtolower(rewrite($key)), $q) !== false) {
echo utf8_encode($key)."\n";
}
}
jQuery代码:
$(document).ready(function(){
$("#autocomplete").autocomplete("/search_words.php", {
position: 'after',
selectFirst: false,
minChars: 3,
width: 240,
cacheLength: 100,
delay: 0
}
)
}
);
我使用了类似的配置,但使用的是丹麦语字符(æ、ø和å),我对任何字符都没有问题。您确定所有字符的编码都正确吗 我的响应包含一个|分隔的值列表。所有值都是UTF-8编码的(这就是它们在数据库中的存储方式),我将内容类型设置为text/plain;charset=utf-8,使用php的头函数。不过,它不需要最后一位就可以工作
- 坦率的
- 不会使用小写特殊字符
- 因此,您没有在重写函数中转换大写特殊字符(
等)ÄÆØ
- 缺陷(我认为):
Øygarden
(注意大写字母Ø)的查询将以原始形式保留第一个字符Ø
,但您是在查询urlencode()d表单,它应该是%C3%98
您应该使用指定UTF-8作为编码
让我知道这是否解决了问题
一般重写建议
您的代码可以使用标准PHP函数100%替换,标准PHP函数可以处理所有Unicode字符,而不仅仅是您指定的字符,因此不太容易出现错误。我认为您的自定义rewrite()
函数的功能可以由
- urldecode()
- ()
utf8\u encode()
。
有可能获得一种更干净的方法,这种方法适用于所有角色。也可能是因为它已经对存在的任何bug进行了排序(如果bug在您的代码中)。感谢您提供的所有答案和帮助。我确实学到了一些关于PHP和编码的新知识:) 但对我有效的解决方案是: 我发现jQuery autocomplete函数实际上在发送到PHP函数之前对特殊字符进行UTF-8编码和小写。因此,当我写出建议内容的数组时,我使用
rewrite()
-函数对特殊字符进行编码。因此,在我的比较函数中,我只需将所有内容小写即可
现在它工作得很好 我也有类似的问题。在我的例子中,解决方案是使用urldecode()php函数将字符串转换回原始字符串,然后将查询发送到数据库 在第一个位置使用非编码字符时是否得到有效的返回?以及如何构建返回列表-可能有助于查看代码\查询。为什么要使用自定义编码脚本,为什么不使用ajax在utf-8中发布数据?