rawurlencode() Nedir?
rawurlencode(), verilen metni URL içerisinde güvenli biçimde kullanılabilecek hale getirir. Fonksiyon, harf ve rakamlar dışındaki birçok karakteri yüzde işaretiyle başlayan hexadecimal kodlara dönüştürür.
Bu yöntem RFC 3986 standardına uygun biçimde çalışır. Özellikle URL yol parçalarını, dosya adlarını, kategori adlarını ve dinamik adres bölümlerini kodlamak için tercih edilir.
PHP rawurlencode() Kullanım Örneği
<?php
$baslik = "PHP ile URL Kodlama";
$kodlanmisBaslik = rawurlencode($baslik);
echo $kodlanmisBaslik;
?>
Yukarıdaki kodun çıktısı şu şekilde olur:
PHP%20ile%20URL%20Kodlama
Görüldüğü gibi metindeki boşluk karakterleri %20 olarak kodlanmıştır.
Türkçe Karakterlerle rawurlencode() Kullanımı
rawurlencode(), Türkçe karakterleri de URL içerisinde güvenli biçimde temsil eder.
<?php
$kategori = "Yazılım Eğitimleri";
echo rawurlencode($kategori);
?>
Örnek çıktı:
Yaz%C4%B1l%C4%B1m%20E%C4%9Fitimleri
Bu kodlama sonucunda Türkçe karakterler UTF-8 byte değerlerine göre yüzde kodlarına dönüştürülür.
urlencode() Nedir?
urlencode() da özel karakterleri URL uyumlu hale getirir. Ancak bu fonksiyon boşluk karakterlerini %20 yerine artı işaretiyle (+) kodlar.
<?php
$arama = "PHP PDO örnekleri";
echo urlencode($arama);
?>
Örnek çıktı:
PHP+PDO+%C3%B6rnekleri
Bu davranış, HTML form verilerinde kullanılan application/x-www-form-urlencoded biçimiyle uyumludur.
rawurlencode() ile urlencode() Arasındaki Fark
| Özellik | rawurlencode() | urlencode() |
|---|---|---|
| Boşluk karakteri | %20 olarak kodlanır. |
+ olarak kodlanır. |
| Standart | RFC 3986 uyumludur. | Form URL kodlama biçimine uygundur. |
| En uygun kullanım | URL yol parçaları ve dosya adları | Sorgu parametreleri ve form verileri |
| Örnek | PHP%20Dersleri |
PHP+Dersleri |
URL Yolunda rawurlencode() Kullanımı
Dinamik bir kategori veya dosya adını URL yoluna eklerken rawurlencode() kullanmak daha doğru bir yaklaşımdır.
<?php
$kategori = "Web Tasarım";
$url = "/kategori/" . rawurlencode($kategori);
echo $url;
?>
Oluşan adres:
/kategori/Web%20Tasar%C4%B1m
Bu kullanımda kategori adı URL yolunun bir parçasıdır. Bu nedenle boşlukların %20 biçiminde kodlanması daha uygundur.
Sorgu Parametresinde urlencode() Kullanımı
Bir arama kelimesini sorgu parametresi olarak göndermek için urlencode() kullanılabilir.
<?php
$kelime = "PHP güvenlik";
$url = "/arama?q=" . urlencode($kelime);
echo $url;
?>
Oluşan adres:
/arama?q=PHP+g%C3%BCvenlik
Sorgu parametreleri hazırlanırken PHP'nin http_build_query() fonksiyonu da çoğu durumda daha güvenli ve düzenli bir seçenek sunar.
<?php
$parametreler = [
"q" => "PHP güvenlik",
"sayfa" => 2
];
$url = "/arama?" . http_build_query($parametreler);
echo $url;
?>
rawurldecode() ile Kodlanmış Veriyi Çözme
rawurlencode() ile kodlanan bir değer, rawurldecode() fonksiyonuyla eski haline döndürülebilir.
<?php
$kodlanmis = "PHP%20ile%20URL%20Kodlama";
$metin = rawurldecode($kodlanmis);
echo $metin;
?>
Çıktı:
PHP ile URL Kodlama
Hangi Fonksiyon Ne Zaman Kullanılmalı?
- URL yolu veya dosya adı kodlanacaksa
rawurlencode()kullanın. - Basit bir sorgu parametresi kodlanacaksa
urlencode()kullanılabilir. - Birden fazla sorgu parametresi oluşturulacaksa
http_build_query()tercih edin. - Kodlanmış URL yolunu çözmek için
rawurldecode()kullanın. - Form tipi kodlanmış veriyi çözmek için
urldecode()kullanın.
Önemli Bir Güvenlik Notu
URL kodlama işlemi bir güvenlik filtresi değildir. rawurlencode() veya urlencode() kullanmak, kullanıcıdan gelen veriyi SQL injection, XSS veya benzeri saldırılara karşı tek başına güvenli hale getirmez.
Veritabanı sorgularında PDO prepared statement, HTML çıktılarında ise kullanım yerine göre htmlspecialchars() gibi uygun güvenlik yöntemleri ayrıca uygulanmalıdır.
Sonuç
rawurlencode() ve urlencode() benzer görünse de aynı amaçla kullanılmamalıdır. URL yol parçalarında standartlara daha uygun bir sonuç elde etmek için rawurlencode(), sorgu parametreleri ve form tipi kodlamalarda ise urlencode() tercih edilebilir.
Kısaca özetlemek gerekirse; URL yolu için rawurlencode(), sorgu parametresi için urlencode() yaklaşımı pratik ve doğru bir başlangıç noktasıdır.