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; } 

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

Ошибка (я думаю):

  • Strtolower() не будет Strtolower() строчные символы.
  • Таким образом, вы не конвертируете специальные символы в функцию повторной записи ( Ä Æ Ø Å и т. Д.),

если я правильно понял код, запрос для Øygarden (обратите внимание на капитал Ø) оставил бы первый символ в его исходной форме Ø , но вы запрашиваете форму urlencode () d, которая должна быть %C3%98

Вы должны использовать mb_convert_case() определяющий UTF-8 как кодировку.

Дайте мне знать, разрешит ли это это.

Общие рекомендации по повторной записи

Ваш код может быть заменен на 100% с использованием стандартных функций PHP, которые могут обрабатывать все символы Unicode вместо тех, которые вы указали, тем самым менее подвержены ошибкам. Я думаю, что функциональность вашей пользовательской функции rewrite() может быть заменена на

  • urldecode ()
  • iconv ()

вы получили бы правильные кодированные UTF-8 данные, которые вам больше не нужны utf8_encode() . Можно было бы получить более чистый подход таким образом, который работает для всех персонажей. Также может случиться так, что он уже сортирует любую ошибку (если ошибка в вашем коде).

Я использую аналогичную конфигурацию, но с датскими персонажами (æ, ø и å), и у меня нет проблем с любыми символами. Вы уверены, что кодируете все символы правильно?

Мой ответ содержит | список значений. Все значения кодируются в кодировке UTF-8 (так они хранятся в базе данных), и я задал тип содержимого text / plain; charset = utf-8, используя функцию заголовка php. Последний бит для этого не нужен.

  • Фрэнк

Спасибо за все ответы и помощь. Я, конечно, узнал некоторые новые вещи о PHP и кодировании 🙂

Но решение, которое сработало для меня, было следующим:

Я узнал, что функция автозаполнения jQuery фактически кодирует UTF-8 и строчный специальный символ перед отправкой его в функцию PHP. Поэтому, когда я выписываю массивы предлагаемого контента, я использовал функцию rewrite() для кодирования специальных символов. Поэтому в моей функции сравнения мне нужно было только опустить все.

Теперь он отлично работает!

У меня была схожая проблема. решение в моем случае было функцией urldecode () php, чтобы преобразовать строку обратно в исходную, а затем отправить запрос в db.