Doğru Cevap
-
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.
Cevaplar
-
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çindeOptions +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 ekleyinOptions +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.