Intereting Posts
извлекать информацию с другой веб-страницы Лучший способ избежать дублирования ввода в базу данных mysql максимальная длина сообщения и имя переменной Одновременное использование переключателей и выпадающего селектора для вариантов продукта Выпадающий список ajax php PHP SSH2 exec "$" Как работает проверка идентификатора OpenID? Apache, javascript и PhoneGap: Каков наилучший способ прослушать какое-то случайное событие? Интервал или длительный опрос? Будет ли синглтон хорошим шаблоном дизайна для сайта микроблогов? Неустранимая ошибка: использование $ this, если не в объектном контексте в TCPDF очень медленное поколение динамического арабского PDF WooCommerce: получить данные Json в многомерном массиве, соответствующие произвольному полю ACF WebSocket с Laravel 5.2 Содержимое ведра S3 не попадает в список до последнего Переменные сеанса PHP исчезают с перенаправлением заголовка

PHP: замените umlauts ближайшим 7-разрядным эквивалентом ASCII в строке UTF-8

Я хочу, чтобы удалить все акценты и умлауты из строки, превратив «lärm» в «larm» или «andré» в «andre». То, что я пытался сделать, это utf8_decode строку, а затем использовать strtr на ней, но поскольку мой исходный файл сохраняется как файл UTF-8, я не могу вводить символы ISO-8859-15 для всех умляутов – редактор вставляет Символы UTF-8.

Очевидно, решение для этого было бы включать в себя файл ISO-8859-15, но должен быть лучший способ, чем иметь еще один требуемый include?

echo strtr(utf8_decode($input), 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ', 'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy'); 

UPDATE: Возможно, я был немного неточен тем, что я пытаюсь сделать: на самом деле я не хочу удалять умлауты, но вместо них их ближайший эквивалент «один символ ASCII».

Solutions Collecting From Web of "PHP: замените umlauts ближайшим 7-разрядным эквивалентом ASCII в строке UTF-8"

 iconv("utf-8","ascii//TRANSLIT",$input); 

Расширенный пример

Небольшой трюк, который не требует установки локалей или наличия огромных таблиц перевода:

 function Unaccent($string) { if (strpos($string = htmlentities($string, ENT_QUOTES, 'UTF-8'), '&') !== false) { $string = html_entity_decode(preg_replace('~&([az]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|tilde|uml);~i', '$1', $string), ENT_QUOTES, 'UTF-8'); } return $string; } 

Единственное требование для его правильной работы – сохранить ваши файлы в UTF-8 (как вы уже должны были).

вы также можете попробовать это

 $string = "Fóø Bår"; $transliterator = Transliterator::createFromRules(':: Any-Latin; :: Latin-ASCII; :: NFD; :: [:Nonspacing Mark:] Remove; :: Lower(); :: NFC;', Transliterator::FORWARD); echo $normalized = $transliterator->transliterate($string); 

но вам нужно иметь http://php.net/manual/en/book.intl.php

Хорошо, я нашел очевидное решение, но это не лучший результат.

 echo strtr(utf8_decode($input), utf8_decode('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ'), 'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy'); 

Для арабских и персидских пользователей я рекомендую этот способ удалить диакритические знаки:

  $diacritics = array('َ','ِ','ً','ٌ','ٍ','ّ','ْ','ـ'); $search_txt = str_replace($diacritics, '', $diacritics); 

Для ввода диакритических знаков на арабских клавиатурах вы можете использовать эти коды Asci (эти коды Asci не Unicode) в редакторах Windows, набирая диакритические символы напрямую или удерживая Alt + (введите код диакритического символа). Это коды

(0243) (0246) (0245) (0240) (0242) (0241) (0250) (0248) (0220)

Я обнаружил, что это дает самые последовательные результаты на французском и немецком языках. с метатегом, установленным в utf-8 , я помещаю его в функцию, чтобы возвращать строку из массива слов, и она отлично работает.

 htmlentities ( $line, ENT_SUBSTITUTE , 'utf-8' )