SO soru ismi gibi bir URL yerleştirme için bir dize temizlemek için en iyi yolu nedir?

1 Cevap php

SO sorulara bağlantıları için kullandığı gibi bir URL dizesi oluşturmak için arıyorum. Ben url () mod_rewrite yeniden bakarak değilim. Ben sayfasındaki linki üreten bakıyorum.

Örnek: Soru adı:

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

URL varlık biter:

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

Ben ilgileniyorum parçasıdır:

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

Yani temelde hala okunabilir URL tutarken alfanümerik olmayan bir şey temizlemek için arıyorum. Ben oluşturulan şu var, ama iyi yolu ya da kapsıyorsa, tüm olasılıklar emin değilim:

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

Yani temelde:

  1. süs
  2. hiçbir şey ile herhangi bir rakam olmayan artı boşluk yerine
  3. sonra bir tire ile alfanümerik olmayan her şeyi yerine
  4. yerine - ile -.
  5. strtolower()
  6. urlencode() - muhtemelen ama sadece iyi ölçmek için, gerekli değil.

1 Cevap

Zaten belirttiğimiz gibi, urlencode () Bu durumda gerekli ve ne is () Döşeme değildir. Eğer doğru anlamak, adım 4 bir satırda birden tire önlemek için, ama o daha iki tire engel olmaz. Öte yandan, onlar SO korunmuş gibi görünüyor ise çözümünüz tarafından silinecektir ("büyük ölçekli" gibi) iki kelime bağlayan tire.

Bu gerçekten bunu yapmak için best yol olduğundan emin değilim, ama burada benim öneri:

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

Yani:

  1. ne boşluk, çizgi, ne de alfanümerik herhangi karakterini kaldırın
  2. Tek bir çizgi ile boşluk veya tire herhangi bir ardışık sayı değiştirin
  3. strtolower ()