2010-02-25 6 views
0

Je souhaite envoyer une URL dans une requête POST dans une variable appelée surl. Comment dois-je l'encoder en JavaScript et le décoder en PHP? Par exemple, la valeur surl peut être http://www.google.co.in/search?q=javascript+urlencode+w3schools.Comment encoder une URL en JavaScript et PHP?

EDIT

Désolé, j'oublié de mentionner, il forme la soumission, mais une demande de paiement ajax.

Répondre

2

Utilisez encodeURIComponent(uri) (pour l'encodage) et decodeURIComponent(uri) pour le décodage,

par exemple (encodage).

var uri="http://w3schools.com/my test.asp?name=ståle&car=saab"; 
document.write(encodeURIComponent(uri)); 

sortie

http% 3A% 2F% 2Fw3schools.com% 2Fmy% 20test.asp% 3Fname% 3Dst% C3% A5le% 26car% 3Dsaab

Decoding est laissé pour le lecteur. :-)

Source: http://www.w3schools.com/jsref/jsref_encodeURIComponent.asp

3

Vous n'avez besoin de rien. Envoyez-le tel quel. Le navigateur et PHP vont tous s'échapper et se dérober pour vous (si vous utilisez form.surl.value = surl; form.submit() et $_POST['surl']). Ou vous pouvez simplement utiliser le formulaire simple sans JavaScript (s'il répond à vos besoins).

Répondre au commentaire de henasraf. Essayez ceci.

<form id="form" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" 
    onsubmit="this.via_js.value=this.via_plain_form.value;"> 
<input type="hidden" name="via_js"/> 
<input type="text" name="via_plain_form" value="Paste you url here"/> 
<input type="submit" name="submit" value="Submit"/> 
</form> 

<?php 

if (isset($_POST['submit'])) { 
    var_export($_POST); 
} 

?> 

Pour http://www.google.co.in/search?q=javascript+urlencode+w3schools, il émet

array (
    'via_js' => 'http://www.google.co.in/search?q=javascript+urlencode+w3schools', 
    'via_plain_form' => 'http://www.google.co.in/search?q=javascript+urlencode+w3schools', 
    'submit' => 'Submit', 
) 
+0

Corrigez-moi si je me trompe, mais + dans l'URL compterait comme espace, non? PHP ne le résoudra pas, je suis sûr, il va * corriger * les espaces réguliers et les transformer en signes "+" et vice-versa, mais pour ajouter un littéral + vous devrez utiliser "% 2B". Je pense que cela s'applique aussi dans d'autres cas. – casraf

+0

PHP ou le navigateur ne se soucie pas si vous transmettez l'URL ou quelque chose d'autre. L'URL est traitée comme n'importe quelle autre donnée de formulaire. Le navigateur échappe tous les caractères de fantaisie dans vos données de formulaire, transmet des données, et PHP les désapparaît à l'autre extrémité. – codeholic

0

Quant à PHP, il est urlencode() et urldecode().