PHP urlize işlevi

4 Cevap php

Ben kabul URL kullanıcı girişini dönüştürmek için web siteme bu işlevi kullanarak ediyorum:

function urlize($url) { 
$search = array('/[^a-z0-9]/', '/--+/', '/^-+/', '/-+$/' ); 
$replace = array( '-', '-', '', ''); 
return preg_replace($search, $replace, utf2ascii($url)); 
}     
function utf2ascii($string) { 
$iso88591  = "\\xE0\\xE1\\xE2\\xE3\\xE4\\xE5\\xE6\\xE7"; 
$iso88591 .= "\\xE8\\xE9\\xEA\\xEB\\xEC\\xED\\xEE\\xEF"; 
$iso88591 .= "\\xF0\\xF1\\xF2\\xF3\\xF4\\xF5\\xF6\\xF7"; 
$iso88591 .= "\\xF8\\xF9\\xFA\\xFB\\xFC\\xFD\\xFE\\xFF"; 
$ascii = "aaaaaaaceeeeiiiidnooooooouuuuyyy"; 
return strtr(mb_strtolower(utf8_decode($string), 'ISO-8859-1'),$iso88591,$ascii); 
}

Ben sayılarla olsa onunla bir sorun yaşıyorum. : Ben denemek nedense

echo urlize("test 23342");

Ben "deneme-eiioe" olsun. Neden olduğunu ve bunu nasıl düzeltebilirim?

Thank you very much!

4 Cevap

Sorun utf2ascii bulunmaktadır. Ben yerine iconv() fonksiyonunu kullanmanızı öneririm.

iconv("UTF-8", "ISO-8859-1//IGNORE", $string);

/ / Çıkış kodlama kısmı tercüme değil herhangi karakterini göz ardı etmek anlamına gelir GÖRMEZDEN. Kötü haber tüm aksanlı karakterler kaybetmek. Onları tutmak için, / / ​​translite kullanabilirsiniz.

Sonra, alfasayısal olmayan karakterler ortadan kaldırmak için strtolower ve bazı regexpi kullanabilirsiniz (ya da bunları değiştirmek için -).

Eğer herhangi bir veri kodlamak istiyorsanız, orada urlencode() da, ama bu size güzel bağlantılar yapmaz.

Bir sümüklü böcek oluşturmak için çalışıyoruz gibi Hey, bu görünüyor. Eğer öyleyse, bu ben önermek / kullanmak fonksiyonudur:

function slug( $string ) {
    return strtolower( preg_replace( array( '/[^-a-zA-Z0-9\s]/', '/[\s]/' ), array( '', '-' ), $string ) );
}

Sizin utf2ascii fonksiyon bu test 23342 test eiioe dönüşüyor biri, yanlış.

Neden iconv, ISO-8859-1 UTF-8 dönüştürme yapmak için kullanmak değil mi? yani. kullanmak iconv("UTF-8", "ISO-8859-1//TRANSLIT", $url);

Ne) (urlencode nesi var?