Заменить диакритические символы “эквивалентным” ASCII в PHP?

Связанные вопросы:

  1. Как заменить символы в Строке Java?
  2. Как заменить специальные символы их эквивалентом (такие как "а" для) в C#?

Как в вопросах выше, я ищу надежный, устойчивый способ уменьшить любой unicode символ до почти эквивалентного ASCII с помощью PHP. Я действительно не хочу прокручиваться, мои собственные ищут таблицу.

Например (украденный от 1-го вопроса, на который ссылаются): Gračišće становится Gracisce

14
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

Модуль iconv может сделайте это, а точнее, функцию iconv () :

$str = iconv('Windows-1252', 'ASCII//TRANSLIT//IGNORE', "Gracišce");
echo $str;
//outputs "Gracisce"

Основная проблема с iconv заключается в том, что вам просто нужно следить за своими кодировками, но это определенно правильный инструмент для работы (я использовал 'Windows -1252 'для примера из-за ограничений текстового редактора, с которым я работал;) Особенность iconv, которую вы определенно хотите использовать, - это флаг // TRANSLIT , который сообщает iconv транслитерировать любые символы, которые не имеют соответствия ASCII в самом близком приближении.

32
ответ дан 1 December 2019 в 07:12
поделиться

Мое решение - создать две строки - первая с нежелательными буквами, а вторая с буквами, которые заменят первые.

$from = 'čšć';
$to   = 'csc';
$text = 'Gračišće';

$result = str_replace(str_split($from), str_split($to), $text);
2
ответ дан 1 December 2019 в 07:12
поделиться

Попробуйте следующее:

function normal_chars($string)
{
    $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
    $string = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', $string);
    $string = preg_replace(array('~[^0-9a-z]~i', '~-+~'), ' ', $string);
    return trim($string);
}

Examples:

echo normal_chars('Álix----_Ãxel!?!?'); // Alix Axel
echo normal_chars('áéíóúÁÉÍÓÚ'); // aeiouAEIOU
echo normal_chars('üÿÄËÏÖÜŸåÅ'); // uyAEIOUYaA

На основе выбранного ответа в этой ветке: URL-адрес удобного имени пользователя в PHP?

1
ответ дан 1 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: