Doğal bir metinden bir güzel ve geçerli bir URL oluşturmak için bir PHP işlevi var mı?

7 Cevap

Ben bu gibi herhangi bir doğal metin okunabilir URL otomatik oluşturmak istiyorum:

Son makale: Almanca mektuplarda - aou ve SS Taşıma!

ideal olarak bu değişmiş olacaktır

son-makale-yaklaşık-Almanca-harfler-işleme-aou-ve-ss.html

Tüm latin tabanlı diller için çalışması gerekir ve ben herhangi kaçmasını önlemek istiyoruz.

Ben bu normal ifadelerle elde edilebilir sanırım, ama belki de PHP / AHLAT / PECL'de mevcut standart bir fonksiyon zaten orada.

7 Cevap

Ne arıyorsanız slugify metin olduğunu.

Bu tür hile yapacak bu biri olarak internette kod parçacıkları bulabilirsiniz:

/**
 * Modifies a string to remove al non ASCII characters and spaces.
 */
static public function slugify($text)
{
    // replace non letter or digits by -
    $text = preg_replace('~[^\\pL\d]+~u', '-', $text);

    // trim
    $text = trim($text, '-');

    // transliterate
    if (function_exists('iconv'))
    {
        $text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
    }

    // lowercase
    $text = strtolower($text);

    // remove unwanted characters
    $text = preg_replace('~[^-\w]+~', '', $text);

    if (empty($text))
    {
        return 'n-a';
    }

    return $text;
}

Dan here.

Bunu yapmak için bir işlevi olduğunu sanmıyorum, ben son zamanlarda bu olsa yarattı:

function fix_url($word) {
    /**
     * whilst the descriptor in the url will be for SEO     
     * purposes only, we need to ensure it doesn't break
     * the URI rules http://www.faqs.org/rfcs/rfc2396.html
     */  

    // convert to lower case
    $word=strtolower($word);

    // define illegal / replacement characters
    $illegal = array("ä","ö","ü","ß");
    $replace = array("a","o","u","ss");
    $word = str_replace($illegal, $replace, $word);

    // remove & for and
    $word=str_replace("&","and",$word);

    // remove a space for -
    $word=str_replace(" ","-",$word);

    // and replace all non alphanumeric characters or a dash
    $word=ereg_replace("[^A-Za-z0-9-]", "", $word);
    return $word;
}

Güvenli bir biri ile geçersiz bir karakter değiştirme bir örnek dahil ettik.

Ben bu kodu denedim ve latest-article-about-german-letters---handling-aou-and-ss açıkçası biraz tweaks yapmak için hala vardır döndürür (bkz. ---), butIi'm bu uyarlamak kolay olacaktır emin olun.

Bir zaman I sucessfuly utf8_to_ascii PHP UTF8 kütüphanesinden kullanın. Herhangi bir UTF-8 metin (non-latin dahil) için çalışır.

str_replace kullanarak onlar üzerinden özel karakter ile bir dizi, döngü oluşturmak ve istenen değer ile değerler recplace.

Kesinlikle ilk özel karakterleri değiştirmek gerekir. Sonra preg_replace kullanmak ve böyle bir şey yapabileceğini

$url = preg_replace("#[^a-zA-Z0-9_-]#", "_", $string);

Ben bir dizeden bir dosya adı oluşturmak için aşağıdakileri kullanabilirsiniz:

function format_filename($str)
{
    $str = preg_replace('/[^A-Za-z0-9- ]/', $seperator, $str);
    $str = str_replace($seperator, '', $str);
    $str = str_replace(' ', $seperator, $str);
    return strtolower($str);
}

Bu hızlı ve kirli ve ben burada diğer güzel insanların bazıları bu kod parçacığını artırabilirsiniz eminim.

Benim için mükemmel çalışıyor GitHub, bu slugify işlevi bulundu. O da (örneğin: ä -> ae) Alman inceltmeleri değiştirir.

https://github.com/mintao/yii-behavior-sluggable/blob/master/Doctrine_Inflector.php

$url = Doctrine_Inflector::urlize($text);