Rumah  >  Soal Jawab  >  teks badan

Membandingkan dua rentetan dan mengabaikan (tetapi tidak menggantikan) aksen. PHP

<p>Saya mendapat (sebagai contoh) dua rentetan: </p> <pre class="brush:php;toolbar:false;">$a = "joao"; $b = "joão"; if (strtoupper($a) == strtoupper($b)) { gema $b; }</pre> <p>Saya harap ia benar walaupun dengan loghat. Walau bagaimanapun, saya memerlukannya untuk mengabaikan aksen dan bukannya menggantikan, kerana saya perlu mengeluarkan "joão" dan bukannya "joao". </p> <p>Semua jawapan yang saya lihat menggantikan "ã" dengan "a" dan bukannya menjadikan perbandingan itu benar. Saya telah membaca tentang normalisasi tetapi saya juga tidak dapat membuatnya berfungsi. Ada idea? Terima kasih. </p>
P粉476046165P粉476046165451 hari yang lalu468

membalas semua(2)saya akan balas

  • P粉068510991

    P粉0685109912023-08-18 11:34:44

    Saya ingin berkongsi penyelesaian elegan yang mengelakkan penggunaan htmlentiti dan tidak memerlukan penyenaraian semua penggantian aksara secara manual. Ini ialah terjemahan php dari posini.

    function removeAccents($str) {
        return preg_replace('/[\x{0300}-\x{036f}]/u',"",normalizer_normalize($str,Normalizer::FORM_D));
    }
    
    $a = "joaoaaeeA";
    $b = "joãoâàéèÀ";
    
    var_dump(removeAccents($a) === removeAccents($b));

    Keluaran:

    bool(true)

    balas
    0
  • P粉470645222

    P粉4706452222023-08-18 10:51:27

    Hanya tukar simbol beraksen kepada rakan tanpa aksen dan bandingkan rentetannya. Fungsi dalam jawapan saya akan mengalih keluar aksen untuk anda.

    function removeAccents($string) {
        return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '', htmlentities($string, ENT_QUOTES, 'UTF-8'))), ' '));
    }
    
    $a = "joaoaaeeA";
    $b = "joãoâàéèÀ";
    
    var_dump(removeAccents($a) === removeAccents($b));

    Keluaran:

    bool(true)

    Demo

    balas
    0
  • Batalbalas