2009-02-12 13 views
6

Soruların bağlantıları için kullandığı SO gibi bir URL dizesi oluşturmak istiyorum. Url'yi (mod_rewrite) yeniden yazmaya bakmıyorum. Sayfadaki bağlantıyı oluşturmaya çalışıyorum.SO üzerinde soru adı gibi bir URL'de yerleşim için bir dizeyi temizlemenin en iyi yolu nedir?

Örnek: Soru adıdır:

http://stackoverflow.com/questions/292068/is-it-better-to-use-obgetcontents-or-text-test 

ilgilendiğim parçasıdır:: URL varlık biter

Is it better to use ob_get_contents() or $text .= ‘test’; 

Yani temelde

is-it-better-to-use-obgetcontents-or-text-test 

Ben URL'yi hala okunabilir halde tutarken alfanümerik olmayan bir şeyi temizlemeye çalışıyorum. Oluşturduğum aşağıdaki seçeneklerin, ama en iyi yolu olup olmadığından emin değilim ya da tüm olanakları kapsıyorsa: Yani temelde

$str = urlencode(
    strtolower(
    str_replace('--', '-', 
    preg_replace(array('/[^a-z0-9 ]/i', '/[^a-z0-9]/i'), array('', '-'), 
    trim($urlPart))))); 

:

  1. olmayan herhangi alfasayısal yerine Döşeme artı
  2. no'lu alan olsun, daha sonra alfanümerik olmayan herşeyi
  3. ile değiştirin - ile değiştirin. Muhtemelen gerekli değil, sadece iyi bir önlem için gerekli değildir.
+0

** Çoğalt ** - Gumbo

cevap

5

Zaten işaret ettiğiniz gibi, bu durumda urlencode() gerekli değildir ve trim(). Doğru bir şekilde anlarsam adım 4, bir satırda birden çok çizgi oluşmasını engellemektir, ancak iki satırdan fazlasını engellemez. Öte yandan, iki kelimeyi ("büyük ölçekli" gibi) birleştiren çizgiler, çözümünüzde SO ile korunmuş gibi görünecek. ,

  1. ne alandır herhangi bir karakter kaldırın:

    ben bunu yapmak için iyi yolu gerçekten emin değilim, ama burada benim öneri: Yani

    $str = strtolower( 
        preg_replace(array('/[^a-z0-9\- ]/i', '/[ \-]+/'), array('', '-'), 
        $urlPart)); 
    

    tire ya da alfasayısal

  2. ardışık sayıda boşluk veya kısa çizgi ile tek bir tire
  3. strtolower()
+0

Olası ekstra alanlardan dolayı trim() işlemini hala yapabilirim. –

+0

Evet, muhtemelen haklısınız. Öncü veya takip eden bir çizgi istemezsiniz. Cevabımı kabul ettiğin için teşekkürler. –

+0

-1 aksanlı karakterlerle ilgilenmiyor çünkü, sry. – fabrik