2012-09-27 14 views
8

Ben bir bağlantıKodlanmış ve köşeli parantez içeren URL. Krom/Firefox/IE Farklı davranış

<a href="/items?fc%5B%5D=12345&amp;fc%5B%5D=56789&amp;utf8=%E2%9C%93">foo</a> 

biraz Açık olmak gerekirse (Bu URL çünkü biraz çirkin) bu gibi bakarak var, URL kodlu ve

çevirir edilir neye arzu görünüyor Firefox'ta

:

<a href="/items?fc[]=12345&fc[]=56789&utf8=✓">foo</a> 
form gönderildiğinde

, hedef URL farklı tarayıcılarda farklı görünüyor

http://mydomain/items?fc[]=12345&fc[]=56789&utf8=✓ 

Chrome'da, köşeli parantezler, URL kodlu olarak gösterilir (çoğunu kullanırken çok çirkin ve profesyonel olmayan adresler verir). IE9 (ve eski) her şeyde

http://mydomain/items?fc%5B%5D=12345&fc%5B%5D=56789&utf8=✓ 

gösterdi URL olarak kodlanmış:

http://mydomain/items?fc%5B%5D=12345&fc%5B%5D=56789&utf8=%E2%9C%93 

sadece bir sorun IE beri ben, "utf8 = ..." bölümü ile yaşayabilir. Ancak, tarayıcılardan hiçbirinin köşeli parantezlerin URL'ye açıkça yazılmasıyla ilgili hiçbir sorun yaşanmıyor. Bu yüzden neden Chrome ve IE'yi anlamıyorum, ancak Firefox'un URL kodlaması ile parantezleri göstermesi gerekmiyor. Yani için:

formun html kodu tüm tarayıcılarda aynı olduğundan

, ben bu sitede (bu durumda bir Ruby on Rails site)

DÜZENLEME ile tarayıcılar ile ilgisi var, değil herhalde asıl sorularımı netleştir: Bu neden farklı? En azından Chrome'da iyi görünmesini sağlamanın bir yolu var mı? href = "..." dosyasında URL-escaping yapılarak çirkin bir şekilde düzeltilebilir, ancak bunun URL kodlama kurallarına aykırı olduğunu mu sanırım? Seni kopyalanamaz, paylaşılan web sayfalarından bağlantılı olacak bağlantılarınızı tahmin ediyoruz tahmin (statefulness ile) bu bağlantıları paylaşmak istiyorum gibi

+0

sorun nedir? çirkin mi? –

+0

evet :) Şimdi biraz soruları açıklığa kavuştum! – foolo

+0

POSTing sonuçlarını değerlendirdiniz mi? –

cevap

1

vb gönderilecektir

Büyük olasılıkla bile tarayıcının dışında (Diyelim ki, linkleriniz diğer sayfalara, e-postalara vb. kopyalanır) bazı kodlamaların gerçekleşeceği anlamına gelir. Bu karakterleri kullanmanız gerekiyorsa çirkin kabul edersiniz.

-1

Lütfen yanılmıyorsam beni düzeltin, ancak bu soruna geçici bir çözüm getirmiş olmanın bir yolu, POSTED form değerlerini yakalamak ve bunları PHP ile GET'e dönüştürmektir. ,

<form action="" method="post"> 
<input type="text" name="fc[]" /> 
<input type="submit" value="Submit" /> 
</form> 

Sonra gönderdikten sonra form değerleri yakalamak PHP ile GET sorgu oluşturmak ve kullanıcıyı yönlendirmek: Yani, örneğin, bunu gibi bir POST yöntemi ile bir form kullanabilirsiniz

<?php 
if($_POST['fc']) 
    header('Location: ?'.urldecode(http_build_query($_POST))); 
?> 

Bu, tabii ki belirli senaryolar için (ve belki de OP'nin sorusunun kapsamı birazcık dışında), ama benim durumumda iyi çalışıyor gibi görünüyor.