"Eşdeğer" ile Aksan karakterleri değiştirin

4 Cevap php

İlgili sorular:

  1. http://stackoverflow.com/questions/2653739/how-to-replace-characters-in-a-java-string
  2. http://stackoverflow.com/questions/2393887/how-to-replace-special-characters-with-their-equivalent-such-as-a-for-a

Yukarıdaki sorularda olduğu gibi, PHP kullanarak yakın eşdeğer ASCII herhangi bir unicode karakter azaltmak için güvenilir, sağlam bir yol arıyorum. Gerçekten benim kendi bakmak tablo haddeleme önlemek istiyor.

Örneğin, (1 referans söz çalınan): Gračišće olur Gracisce

4 Cevap

iconv modülü yapabiliriz, daha özel olarak ise, iconv() fonksiyonu:

$str = iconv('Windows-1252', 'ASCII//TRANSLIT//IGNORE', "Gracišce");
echo $str;
//outputs "Gracisce"

Iconv ile ana güçlük (Ben dolayı ben ;) özelliği ile çalışıyordu metin editörü sınırlamaları örneğin 'Windows-1252' kullanılmış sadece kodlamaları izlemek zorunda, ama kesinlikle iş için doğru aracı olduğunu kesinlikle kullanmak istediğiniz iconv yakın yakınlaştırılması bir ASCII maç yok herhangi bir karakter transliterate için iconv söyler //TRANSLIT bayrağı vardır.

Bu deneyin:

function normal_chars($string)
{
    $string = htmlentities($string, ENT_QUOTES, 'UTF-8');
    $string = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', $string);
    $string = preg_replace(array('~[^0-9a-z]~i', '~-+~'), ' ', $string);
    return trim($string);
}

Examples:

echo normal_chars('Álix----_Ãxel!?!?'); // Alix Axel
echo normal_chars('áéíóúÁÉÍÓÚ'); // aeiouAEIOU
echo normal_chars('üÿÄËÏÖÜŸåÅ'); // uyAEIOUYaA

Bu Konuya Seçilen cevaba dayanarak: http://stackoverflow.com/questions/2103797/url-friendly-username-in-php

İlk istedim harfleri ile ve ikinci ilkleri yerini alacak harflerle - Benim çözüm iki dizeleri oluşturmaktır.

$from = 'čšć';
$to   = 'csc';
$text = 'Gračišće';

$result = str_replace(str_split($from), str_split($to), $text);

Ben @ zombat cevabı dayanarak, başka bir çözüm bulundu.

Onun cevabı ile sorunu alıyorum olmasıydı:

Notice: iconv() [function.iconv]: Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed in D:\www\phpcommand.php(11) : eval()'d code on line 3

Ve //IGNORE işlevi çıkardıktan sonra, I got:

Gr'a'e~a~o^O"ucisce

Yani, š karakter doğru çevrilmiş, ama diğer karakterler değildi edildi.

Benim için çalıştı çözüm preg_replace arasında bir karışımı (her şeyi kaldırmak ama [a-zA-Z0-9] - boşluklar dahil) ve @ zombat çözümü:

preg_replace('/[^a-zA-Z0-9.]/','',iconv('UTF-8', 'ASCII//TRANSLIT', "GráéãõÔücišce"));

Çıktı:

GraeaoOucisce