@kirill-93

Как транслитерировать символы в JavaScript или PHP?

Здравствуйте, нужно передавать параметром название товара в сервис, который принимает только латинские символы, все остальные символы этот сервис кодирует.
Проблема в том, что у нас на сайте могут быть названия на любых языках. Например на болгарском. Как мне конвертировать все нелатинские символы в латинские?
Спасибо!
  • Вопрос задан
  • 240 просмотров
Решения вопроса 1
AngReload
@AngReload
Кратко о себе
https://github.com/andyhu/transliteration
Подойдёт?
Там правда символы болгарского транслируются как русский язык: https://github.com/andyhu/transliteration/issues/56
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
В интернетах есть множество готовых функций транслитерации, вроде таких:
тыц
$textcyr="Тествам с кирилица"; // это вообще болгарский, есличо
        $textlat="I pone dotuk raboti!"; // и это
        $cyr = [
            'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п',
            'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',
            'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П',
            'Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'
        ];
        $lat = [ // и замены из болгарского
            'a','b','v','g','d','e','io','zh','z','i','y','k','l','m','n','o','p',
            'r','s','t','u','f','h','ts','ch','sh','sht','a','i','y','e','yu','ya',
            'A','B','V','G','D','E','Io','Zh','Z','I','Y','K','L','M','N','O','P',
            'R','S','T','U','F','H','Ts','Ch','Sh','Sht','A','I','Y','e','Yu','Ya'
        ];
        $textcyr = str_replace($cyr, $lat, $textcyr);
        $textlat = str_replace($lat, $cyr, $textlat);
        echo("$textcyr $textlat");
© https://stackoverflow.com/a/7461449/10129311


Но есть одна маленькая проблемка: в РФ десятка полтора схем транслитерации и они заметно отличаются.
В результате запросто можно попасть в ситуацию, когда паспортный стол при выдаче заграна транслитерировал по одной схеме, авиакомпания в билете транситерировала по другой, банк на карте выбил по третей, а у таможенников четвертая. И тебя нормально выпускают из страны потому что здесь все всё понимают, а ты потом такой стоишь в аэропорту прибытия или в гостиннице, а у тебя в билете, в паспорте и на банковской карте разные фамилии и даже имена. И пытаешься рассказать, что это на самом деле твои документы.

В общем, лучше бы присмотреться внимательно какую именно схему используешь и какая должна быть в вашем случае.

Есть еще встроенный в php класс транслитерации, но я не понимаю какую схему он использует. Впрочем, ему можно скормить любую свою схему.
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
во первых есть нативные средства в пхп, ну и просто сделать пару массивов для конкретно вашего словарного соответствия можно. Что-то типа вот такого:
function translit($string){
        if(extension_loaded('iconv')){
            return iconv('UTF-8', 'ASCII//TRANSLIT', $string);
        }
        else{
            $cyr = array(
                'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п',
                'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',
                'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П',
                'Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'
            );
            $lat = array(
                'a','b','v','g','d','e','io','zh','z','i','y','k','l','m','n','o','p',
                'r','s','t','u','f','h','ts','ch','sh','sht','a','i','y','e','yu','ya',
                'A','B','V','G','D','E','Io','Zh','Z','I','Y','K','L','M','N','O','P',
                'R','S','T','U','F','H','Ts','Ch','Sh','Sht','A','I','Y','e','Yu','Ya'
            );
            return mb_str_replace($cyr, $lat, $string);
        }
    }
Ответ написан
Комментировать
@frees2
Если память не изменяет, помню спецификации, fetch вполне передает не только русские символы.
Лучше в json/
var z = {
name: ''+tar+'',
time: 'время',
c: ' собака <?php echo ''.$list.''; ?>'
};
var json_upload2 =  "json_name=" + JSON.stringify({name: ''+z+'', id:''+tar+''});
fetch('Example.php', { method: 'post',  headers: { "Content-Type":"application/x-www-form-urlencoded"}, body: json_upload2 }) .then(function(response) {  if(response.ok)  return response.text();  }).then(function(data){document.getElementById("demo666").innerHTML = data;   

  });
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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