Metin girişi ile URL için özel karakter kodlama ile Trouble

2 Cevap php

Ben CodeIgniter kullanarak bir PHP uygulama inşa ediyorum. Bu bir metin giriş kutusuna bir cümle yazmak nerede Let Me Google That For You, göndermek tıklatın benzer ve sonucunu görüntüleyen bir URL alınır. Ben URL düzenlenebilir-insan ve nispeten basit olmak istedim. Ben CodeIgniter URL yönlendirme etrafında ele verdik, bu yüzden şu anda benim URL'leri bu gibi görünebilir:

http://website.com/?q=this+is+a+normal+url

Cümle bir soru işareti gibi özel bir karakter veya bir ters eğik çizgi içeren zaman şu anda bir sorundur. Benim şimdiki bu karmaşa iki .htaccess kurallarını yeniden ve karakter kodlanmış bile olmuyor.

http://website.com/?q=this+is+a+normal+url? OR
http://website.com/?q=this+is+a+normal+url%3F

Ne iş yapar çift kodlama. Örneğin, ben soru işareti almak, ve %253F (?% 3F kodlanmış ve% işareti% 25 kodlanmış olduğu) kodlamak eğer. Bu url düzgün çalışır.

http://website.com/?q=this+is+a+normal+url%253F

Herkes burada ne yapabilirim bir fikir var mı? Ben çift giriş kodlamak olabilir akıllı bir yolu var mı? Ben bu almak için bir .htaccess yazma kuralı yazabilir miyim? Ben burada bir kaybı var. İşte şu anda herkes için kullanıyorum yazma kuralları vardır.

RewriteEngine on
RewriteCond %{QUERY_STRING} ^q=(.*)$
RewriteRule ^(.*)$ /index.php/app/create/%{QUERY_STRING}? [L]

Note: CodeIgniter çalışır şekilde bir index/application/function/parameter URL kurulum var olduğunu. Ben şu anda işlevini tam sorgu dizesi besliyorum.

2 Cevap

Yorum yok sonra Apache 2.2 kullanıyorsanız ve eğer, sen kaçtı edilecek geribaşvuru zorlamak için B flag kullanabilirsiniz:

RewriteCond %{QUERY_STRING} ^q=.*
RewriteRule ^ /index.php/app/create/%0? [L,B]

Ben genellikle bu gibi insan okunabilir adresler yapmak

$humanReadableUrl= implode("_",preg_split('/\W+/', trim($input), -1, PREG_SPLIT_NO_EMPTY));

Herhangi bir sözcük olmayan karakterleri kaldırmak ve kelimelerin beetween çizgi katacak