2012-09-27 8 views
8

ho un link simile a questo (che è un po 'brutto perché è URL)URL codificato con parentesi quadre. un comportamento diverso in Chrome/Firefox/IE

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

essere un po' chiaro, è URL codificato e si traduce in

<a href="/items?fc[]=12345&fc[]=56789&utf8=✓">foo</a> 

quando il modulo viene inviato, l'URL di destinazione aspetto diverso a seconda del browser:

in Firefox, sembra desiderata:

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

In Chrome, le parentesi quadre sono mostrate con codifica URL, (che fornisce indirizzi molto brutti e non professionali quando si utilizzano molti di essi).

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

In IE9 (e precedenti) tutto è mostrato con codifica URL:

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

posso vivere con la "utf8 = ..." parte, dal momento che è solo un problema in IE. Ma nessuno dei browser ha problemi con la gestione quando le parentesi quadre sono digitate esplicitamente nell'URL, quindi non capisco perché Chrome e IE, ma non Firefox deve mostrare le parentesi con la codifica URL.

Dal codice html del form è lo stesso in tutti i browser, suppongo che sia ha a che fare con i browser, e non con il sito (un sito di Ruby on Rails in questo caso)

EDIT: Quindi, per chiarire le mie domande effettive: Perché è diverso? C'è un modo per farlo sembrare buono almeno in Chrome? Può essere brutto-fissato da non URL-escape in href = "..." ma suppongo che sia contro le regole di codifica URL?

+0

quindi qual è il tuo problema? che è brutto? –

+0

sì :) ho chiarito un po 'le domande ora! – foolo

+0

hai considerato i risultati POSTing? –

risposta

1

Come si desidera condividere questi collegamenti (con statefulness) Presumo si sta anticipando i vostri collegamenti saranno condivise, collegato da pagine web, copiati, inviati via email, ecc

E 'probabile che anche al di fuori del browser (diciamo, dove i tuoi link sono copiati in altre pagine, in e-mail e così via) che si verificherà qualche codifica. Potrebbe essere necessario accettare brutto apparirà da qualche parte se devi usare quei personaggi.

-1

Si prega di correggermi se ho torto, ma un modo in cui mi sembrava di aver risolto questo problema è catturare i valori dei moduli POST e trasformarli in GET con PHP. Così, per esempio, è possibile utilizzare un modulo con un metodo POST, in questo modo:

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

poi prendere i valori forme dopo la presentazione, creare una query GET con PHP e reindirizzare l'utente:

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

Ovviamente si tratta di scenari specifici (e forse leggermente al di fuori della portata della domanda dell'OP), ma sembra che funzioni bene nel mio caso.

Problemi correlati