jQuery自动完成特殊字符(挪威语)问题

jor*_*gen 2 javascript php jquery

我在我的挪威网站上使用jQuery的自动完成功能.当输入挪威字符æ,ø和å时,自动完成功能会建议具有相应字符的单词,但不会显示以相应字符开头的单词.看起来我要设法在单词中间对挪威字符进行字符编码,而不是以字母开头的字符.

我正在使用带有我自己的函数的PHP脚本将挪威字符编码为UTF-8并生成自动完成列表.

这真是令人沮丧!

码:

PHP代码:

$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;
}
Run Code Online (Sandbox Code Playgroud)

$items 是一个包含建议词的数组.

foreach ($items as $key=>$value) {
  if (strpos(strtolower(rewrite($key)), $q) !== false) {
    echo utf8_encode($key)."\n";
  }
}
Run Code Online (Sandbox Code Playgroud)

jQuery代码:

$(document).ready(function(){
$("#autocomplete").autocomplete("/search_words.php", {
        position: 'after',
        selectFirst: false,
        minChars: 3,
        width: 240,
        cacheLength: 100,
        delay: 0
        }
    )
}
);
Run Code Online (Sandbox Code Playgroud)

Pek*_*ica 7

错误(我认为):

  • Strtolower() 不会小写特殊字符.
  • 因此,您不会在重写函数中转换大写特殊字符(Ä Æ Ø Å等)

如果我正确理解代码,查询Øygarden(注意大写Ø)将保留原始形式的第一个字符Ø,但是你要查询urlencode()d表格应该是%C3%98

您应该使用mb_convert_case()指定UTF-8作为编码.

让我知道这是否解决了它.

一般重写建议

您可以使用标准PHP函数100%替换您的代码,这些函数可以处理所有Unicode字符,而不仅仅是您指定的字符,因此不容易出现错误.我认为您的自定义rewrite()功能的功能可以替换为

然后,您将获得不再需要的正确的UTF-8编码数据utf8_encode().有可能以适用于所有角色的方式获得更清晰的方法.这可能也是已经种什么错误存在(如果bug在你的代码).