Membandingkan dua rentetan dan mengabaikan (tetapi tidak menggantikan) aksen. PHP
P粉476046165
P粉476046165 2023-08-17 16:16:51
0
2
509
<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粉476046165
P粉476046165

membalas semua(2)
P粉068510991

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)
P粉470645222

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan