如何避免格式错误的 URI 序列错误?

发布于 2024-09-15 23:11:19 字数 680 浏览 6 评论 0原文

我正在使用 perl。我将数据保存在数据库中,

并且我想转义这些字符以避免客户端出现格式错误的 URI 序列错误。这个错误似乎只发生在火狐上。我在谷歌搜索时发现的修复方法是不使用 decodeURI ,但我需要它才能正确显示其他字符。

有什么帮助吗? uri_escape 在服务器端似乎还不够。

提前致谢。


详细信息: 在perl中,我正在执行以下操作:

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

在java脚本方面,我想从此div中读取并将其放在另一个位置,如下所示:

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

其中note_obj是在perl上保存摘要的隐藏div。 当我删除decodeURI 时,问题就解决了,我在java 脚本上没有收到格式错误的URI 序列错误。然而我需要对其他字符使用decodeURI。

这个问题似乎在 Firefox 和 IE7 上重现。

I'm working with perl. I have data saved on database as  “

and I want to escape those characters to avoid having malformed URI sequence error on the client side. This error seems to happen on fire fox only. The fix I found while googling is not to use decodeURI , yet I need this for other characters to be displayed correctly.

Any help? uri_escape does not seem enough on the server side.

Thanks in advance.


Detalils:
In perl I'm doing the following:

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

and on the java script side I want to read from this div and place it on another place as this:

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

where the note_obj is the hidden div that saved the summary on perl.
When I remove decodeURI the problem is solved, I don't get malformed URI sequence error on java script. Yet I need to use decodeURI for other characters.

This issue seems to be reproduced on firefox and IE7.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜巴黎 2024-09-22 23:11:19

您可以尝试使用 CGI 模块,并执行

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

可能取决于您尝试转义 uri 的上下文。
这在 CGI 环境中对我来说效果很好。

添加详细信息后,我可以建议:


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

you can try to use the CGI module, and perform

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

maybe it depends of the context your try to escape the uri.
This worked fine for me in CGI context.

After you added details, i can suggest :


<div style='display:none;' id='summary_".$note_count."_note'>".CGI::escape($summary)."</div>"; 
固执像三岁 2024-09-22 23:11:19

URL 转义在这里对你没有帮助——那是为了转义 URL,而不是转义 HTML 中的文本。您真正想要的是在输出字符串时对其进行编码。请参阅 Encode.pm 内置库。确保 HTTP 标头中的字符集声明正确:“Content-Type: text/html; charset=UTF-8”或类似内容。

如果您不幸运,您可能还必须在字符串从数据库中出来时对其进行解码。这取决于数据库驱动程序和编码......

URL escaping won't help you here -- that's for escaping URLs, not escaping text in HTML. What you really want is to encode the string when you output it. See the Encode.pm built-in library. Make sure that you get your charset statements right in the HTTP headers: "Content-Type: text/html; charset=UTF-8" or something like that.

If you're unlucky, you may also have to decode the string as it comes out of the database. That depends on the database driver and the encoding...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文