2010-08-25 22 views
0

Je travaille avec Perl. J'ai des données enregistrées sur la base de données comme  “Comment éviter les erreurs de séquence URI malformées?

et je veux échapper à ces caractères pour éviter d'avoir une erreur de séquence d'URI malformée sur le côté client. Cette erreur semble se produire sur le feu de renard seulement. Le correctif que j'ai trouvé lors de googling n'est pas d'utiliser decodeURI, mais j'en ai besoin pour que les autres caractères s'affichent correctement.

Une aide? uri_escape ne semble pas assez sur le côté serveur.

Merci d'avance.


Detalils: En perl je fais ce qui suit:

print "<div style='display:none;' id='summary_".$note_count."_note'>".uri_escape($summary)."</div>"; 

et sur le côté java script que je veux lire cette div et placez-le sur un autre endroit comme ceci:

getObj('summary_div').innerHTML= unescape(decodeURI(note_obj.innerHTML)); 

où le note_obj est le div caché qui a sauvé le résumé sur perl. Lorsque je supprime decodeURI le problème est résolu, je ne reçois pas d'erreur de séquence URI malformée sur le script java. Pourtant, j'ai besoin d'utiliser decodeURI pour les autres personnages.

Cette question semble être reproduit sur Firefox et IE7.

+3

Pourquoi uri_escape ne semble pas être suffisant? Montre ce que tu as essayé. :) –

+0

J'ai ajouté des détails sur le problème. – Luci

+0

Voulez-vous dire que votre base de données contient un code UTF-8 incorrect? Ou voulez-vous dire que votre base de données contient UTF-8 qui est correct, mais il ressemble à ça quand vous le regardez avec un outil Latin-1? Pouvez-vous montrer les octets réels que vous avez là, surtout si vous n'êtes pas sûr de ce que cela signifie? – tripleee

Répondre

0

vous pouvez essayer d'utiliser le module CGI et effectuer

$uri = CGI::escape($uri);

peut-être cela dépend du contexte de votre tentative d'échapper à la uri.
Cela a bien fonctionné pour moi dans le contexte de CGI.

Après avoir ajouté les détails, je peux suggérer:


<div style='display:none;' id='summary_".$note_count."_note'>".CGI::escape($summary)."</div>"; 
+0

J'avoue que je ne comprends pas vraiment votre question: avez-vous besoin d'encoder ou de décoder l'uri? – benzebuth

0

Évasion URL ne vous aidera pas ici - c'est pour échapper à des URL, ne pas fuir le texte en HTML. Ce que vous voulez vraiment, c'est encoder la chaîne quand vous la produisez. Voir la bibliothèque intégrée Encode.pm. Assurez-vous que vous obtenez vos instructions charset directement dans les en-têtes HTTP: "Content-Type: text/html; charset = UTF-8" ou quelque chose comme ça.

Si vous êtes malchanceux, vous pouvez également avoir à décoder la chaîne comme il sort de la base de données. Cela dépend du pilote de base de données et l'encodage ...