Вьетнамский акцент - PullRequest
       2

Вьетнамский акцент

0 голосов
/ 27 октября 2019

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

Как улучшить эту функцию, принимая во внимание язык несчастного случая и азиатский язык.

пример: Nông sản Khánh Hòa Sản phẩm từ nuôi ong

Спасибо

    protected function getSkipAccents(string $str, string $charset = 'utf-8'): string
{
  $str = htmlentities($str, ENT_NOQUOTES, $charset);

  $str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
  $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
  $str = preg_replace('#&[^;]+;#', '', $str);
  $str = preg_replace('/[^A-Za-z0-9\-]/', '', $str); // Removes special chars

  return $str;
}

Ответы [ 2 ]

0 голосов
/ 27 октября 2019

intl's Транслитератор позволит вам определить более глубокие правила транслитерации. Полная документация по правилам транслитерации может быть найдена на icu-project.org .

$input = " Nông sản Khánh Hòa Sản phẩm từ nuôi ong";

$tl = Transliterator::create('Latin-ASCII;');

var_dump(
    $input,
    $tl->transliterate($input)
);

Вывод:

string(52) " Nông sản Khánh Hòa Sản phẩm từ nuôi ong"
string(40) " Nong san Khanh Hoa San pham tu nuoi ong"
0 голосов
/ 27 октября 2019

Добавьте пропущенные символы самостоятельно.

$word = getSkipAccents("bãy");
echo $word;

function getSkipAccents($str) 
{
    $str = preg_replace('/(à|á|ã|â|a)/', 'a', $str);
    $str = preg_replace('/(è|é|ê)/', 'e', $str);
    $str = preg_replace('/(ì|í|i)/', 'i', $str);
    $str = preg_replace('/(ò|ó|õ|ô|o)/', 'o', $str);
    $str = preg_replace('/(ù|ú|u|u)/', 'u', $str);
    $str = preg_replace('/(ý)/', 'y', $str);
    $str = preg_replace('/(d)/', 'd', $str);
    $str = preg_replace('/(À|Á|Ã|Â|A)/', 'A', $str);
    $str = preg_replace('/(È|É|Ê)/', 'E', $str);
    $str = preg_replace('/(Ì|Í|I)/', 'I', $str);
    $str = preg_replace('/(Ò|Ó|Õ|Ô|O)/', 'O', $str);
    $str = preg_replace('/(Ù|Ú|U|U)/', 'U', $str);
    $str = preg_replace('/(Ý)/', 'Y', $str);
    $str = preg_replace('/(Ð)/', 'D', $str);
    return $str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...