PHP西里尔语音译:完整的HTML内容(不破坏html标签)?

时间:2018-03-19 14:33:33

标签: php regex transliteration

如何在不损坏html标签的情况下轻松地将完整的html内容西里尔字母转换为延迟。例如:

<title>Главная страница</title>

为:

<title>Glavnaja stranica</title>

示例:

 $cyr="<p>Кирилица</p>";
    $lat="<p>Look that p tag replaced with п</p>";
    $cyrArray = [
        'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п',
        'р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я',
        'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П',
        'Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'
    ];
    $latArray = [
        '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'
    ];
    $cyr = str_replace($cyrArray, $latArray, $cyr);
    $lat = str_replace($latArray, $cyrArray, $lat);
    echo cyr;// it's ok! no problem.
    echo "<br/>";
    echo  $lat;//but in lat to cryillic we should skip html tags
  

在我提出问题之前,我仔细搜索谷歌和stackoverflow,并没有找到有能力的解决方案。

1 个答案:

答案 0 :(得分:0)

public static function filterWord($word)
    {
        $lat = [
            'a','b','v','g','d','đ','e','ž','z','i','j','k','l','lj','m','n','nj','o','p','r','s','t','ć','u','f','h','c','č','dž','š','&scaron;','&nbsp;',
            'A','B','V','G','D','Đ','E','Ž','Z','I','J','K','L','Lj','M','N','Nj','O','P','R','S','T','Ć','U','F','H','C','Č','Dž','Š','&Scaron;'
        ];

        $cyr = [
            'а','б','в','г','д','ђ','е','ж','з','и','ј','к','л','љ','м','н','њ','о','п','р','с','т','ћ','у','ф','х','ц','ч','џ','ш','ш',' ',
            'А','Б','В','Г','Д','Ђ','Е','Ж','З','И','Ј','К','Л','Љ','М','Н','Њ','О','П','Р','С','Т','Ћ','У','Ф','Х','Ц','Ч','Џ','Ш','Ш'
        ];

        $spec1 = [
            'Нј','нј','Лј','лј'
        ];
        $spec2 = [
            'Њ','њ','Љ','љ'
        ];

        $tags_cyr = [
            '<х1','</х1>','<х2','</х2>','<х3','</х3>','<х4','</х4>','<х5','</х5>','<х6','</х6>','<п','</п>','<спан','</спан>','<б','</б>','<стронг','</стронг>','<смалл','</смалл>','<и','</и>','<у','</у>','<имг','</имг>','<див','</див>','<а','</а>','<суб','</суб>','<суп','</суп>','<бр>','<бр/>','<bр','<хр/>','&нбсп;','&лт;','&гт;','&ндасх;','&мдасх;','хреф','срц','&лдqуо;','&бдqуо;','&лсqуо;','&рсqуо;','&сцарон;','&Сцарон;','&тилде;'
        ];

        $tags_lat = [
            '<h1','</h1>','<h2','</h2>','<h3','</h3>','<h4','</h4>','<h5','</h5>','<h6','</h6>','<p','</p>','<span','</span>','<b','</b>','<strong','</strong>','<small','</small>','<i','</i>','<u','</u>','<img','</img>','<div','</div>','<a','</a>','<sub','</sub>','<sup','</sup>','<br>','<br/>','<br','<hr/>','&nbsp;','&lt;','&gt;','&ndash;','&mdash;','href','src','&ldquo;','&bdquo;','&lsquo;','&rsquo;','ш','Ш','&tilde;'
        ];

        $word = str_replace($tags_cyr, $tags_lat, str_replace($spec1, $spec2, str_replace($lat, $cyr, $word)));

        return $word;
    }