2010-04-24 5 views
2

je le code suivant en Python:bâtiment lien correspondant avec des espaces

linkHTML = "<a href=\"page?q=%s\">click here</a>" % strLink 

Le problème est que lorsque strLink comporte des espaces le lien apparaît comme

<a href="page?q=with space">click here</a> 

Je peux utiliser strLink. replace ("", "+")

Mais je suis sûr qu'il y a d'autres caractères qui peuvent causer des erreurs. J'ai essayé d'utiliser

urllib.quote(strLink) 

Mais cela ne semble pas aider.

Merci! Joel

Répondre

2

Assurez-vous d'utiliser urllib.quote_plus (string [, safe]) pour remplacer les espaces par un signe plus.

urllib.quote_plus(string[, safe]) 

Comme citation(), mais remplace aussi des espaces par des signes plus, selon les besoins pour la cotation des valeurs de formulaire HTML lors de la construction d'une chaîne de requête d'entrer dans une URL. Plus signes dans la chaîne d'origine sont échappé à moins qu'ils soient inclus dans en toute sécurité. Il n'a pas non plus par défaut à '/'.

de http://docs.python.org/library/urllib.html#urllib.quote_plus

Idéalement, vous souhaitez utiliser la fonction urllib.urlencode et passer une séquence de paires clé/valeur comme {[ "q", "avec l'espace"], [ "s" , "avec espace & other"]} etc.

1

Outre le quote_plus (*), vous devez également encoder au format HTML tout texte que vous envoyez en HTML. Sinon, les symboles < et & seront marqués, avec des conséquences potentielles sur la sécurité. (OK, vous n'allez obtenir < dans une URL, mais vous allez certainement obtenir &, donc juste un nom de paramètre qui correspond à un nom d'entité HTML et sali de votre chaîne jusqu'à

html= '<a href="page?q=%s">click here</a>' % cgi.escape(urllib.quote_plus(q)) 

*.: En fait, le vieux quote est très bien aussi, je ne sais pas ce qui ne fonctionnait pas pour vous, mais c'est un très bon moyen de coder les chaînes d'URL.Il convertit les espaces en %20 qui est également valide, et valide aussi dans les parties path quote_plus est optimal pour générer des chaînes de requête, mais sinon, en cas de doute, quote est le plus sûr