Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

Preg_replace özel karakterler

İyi günler www.siteadi.com/yazinin_basligi şeklinde URL yapmak başlığı altında bir function inceledim ama bazı yerlerde takıldım.

$text = preg_replace('~[^\pLd]+~u', '-', $text);

$text = preg_replace('~[^-w]+~', '', $text);

burda her bir karakterin ne iş yaradığını bulamadım.
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • 1
    fka adlı üyenin fotoğrafı
    8 yıl önce yazılmış
    70 cevap - 0 soru
    Bunun için Regular Expression öğrenmen gerekli,

    preg_* fonksiyonları regex kabul ederler, senin yazmış olduğun örnekte

    ~[^pLd]+~u

    burada ~ "delimiter" olarak tanınmaktadır. bunun yerine herhangi bir karakter konulabilir fakat ne koyduysan o karakter escape edilmesi gereken karakter olur.

    [ ] (köşeli parantez) "veya" ifadesi katar. [abc] "a veya b veya c" demektir, fakat karakter bazlıdır. kelime bazlı olması için (kelime1|kelime2|kelime3) şeklinde olmalıdır. aralık da verilebilir "a-z" a ile z arasındaki, "1-9" 1 ile 9 arasındaki demektir.

    [ ] içerisindeki ^ işareti "değilse / olmayan" ifadesi katarken (mesela [^>] demek, "> işareti yokken" demektir) diğer koşullarda "başlıyorsa" ifadesi katar.

    $ ifadesi "bitiyorsa" demektir.

    * ifadesi "en az 0 en çok sonsuz", + ifadesi ise "en az 1 en çok sonsuz" ifadesi katar.

    "." (nokta) "herhangi bir karakter" demektir.

    Mesela ".*" "herşey" demektir. Çünkü, "herhangi bir karakterden en az 0 veya sonsuz tane" manası verir.

    "a+" ise "a karakterinden en az 1 veya sonsuz tane" ifadesi katacaktır.

    [a-z]+ ifadesi "a ile z aralığındaki herhangi bir karakterden en az 1 veya sonsuz tane" ifadesi katar.

    PHP'de regex kullanımlarında "()" (parantez) işareti alınması gereken değişkeni temsil eder.

    O yüzden, "[a-z0-9]+" gibi ifadeleri çok görürsünüz.

    PHP'de delimiterlerdan sonra bu regex ile ilgili ayarlar belirlenir

    i = incasesensitive
    u = utf8 / unicode
    s = no-space
    gibi..

    Eğer bu karakterlerin çalışmasını istemiyorsanız ile escape edebilirsiniz.

    Mesela: [[]] demek "[ veya ] karakteri olan" demektir

    Örnek bir php kodu
    $regex = '~<a[^>]*>(.*)<\/a>~ui';
    


    regex kodu, size HTML'deki bir tagını verir.

    Eksik olabilir, tüm bilgiye php.net'ten ulaşabilirsiniz.
    • fka adlı üyenin fotoğrafı fka
      NOT: Verdiğim örneklerde sistemden dolayı bazı karakterler bozuk görünebilir.
      8 yıl önce yazılmış
    • curlyhair adlı üyenin fotoğrafı curlyhair
      tşk ederim arkadaşlar
      8 yıl önce yazılmış

Cevaplar

  • hmustak adlı üyenin fotoğrafı
    8 yıl önce yazılmış
    5 cevap - 0 soru
  • 1
    bcinarli adlı üyenin fotoğrafı
    8 yıl önce yazılmış
    12 cevap - 0 soru
    Bu tarz kullanım için öncelik yapmanın gereken 2 durum var
    1. sisteminiz apache tabanlı bir sunucu da olup, .htaccess dosyası ve mod_rewrite desteği kullanılabilir olmalı.
    2. Veritabanınızda, sayfalarınızı kaydettiğiniz tablo içerisinde, bu linklerde kullanacağınız "yazinin_basligi" kısmıni kaydetmiş olduğunuz _UNIQUE_ değerli bir "yazinin_basligi" sütunu olmalı.

    Daha sonra önce htaccess içinde
    Options +FollowSymLinks
    RewriteEngine on
    
    RewriteBase /
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L] 


    şeklinde bütün sorgularınızı indexçphp dosyasına gönderen bir tanımlama yapmanız gerekiyor. Daha sonra php dosyalarınızda hazırlayacağınız bir url_parser ile yazinin_basligi kısmını alıp, bunu veritabanınızdaki yazıları eklediğiniz tablonun "yazının_basligi" sütunu ile karşılaştırmanız ve ilgili yazıyı seçmeniz gerekiyor.

    Yukarıdaki kullanım wordpress ve diğer benzeri sistemlerde kullanılan bir yöntem. İlk başlarda url parser hazırlamak zor gelebilir ciddi bir şekilde o zaman ikinci bir metod olarak şunu deneyebilirsiniz,

    yine .htaccess kodunuzun içine şu kodu ekleyin
    Options +FollowSymLinks
    RewriteEngine on
    
    RewriteBase /
    
    RewriteRule ^([A-Za-z0-9]+)/$ $1 [R]
    RewriteRule ^([A-Za-z0-9]+)$ index.php?title=$1

    Bu kod ile php dosyanızın içerisinden bir
    $title = $_GET['title']
    şeklinde alabileceğiniz bir sanal querystringiniz olacak. Buradan sonra yine yukarıda anlattığım gibi, bu title değişkeni ile yazılarınızı eklediğiniz tablo içindeki "yazinin_basligi" sütununu kontrol ederek ilgili yazıyı bulabilirsini.