2010-08-25 33 views
0

我正在和perl一起工作。我有数据保存在数据库中作为 “如何避免格式错误的URI序列错误?

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

任何帮助? uri_escape在服务器端似乎不够。

在此先感谢。


Detalils: 在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上重现。

+3

为什么uri_escape似乎不够?显示你的尝试。 :) – 2010-08-25 15:48:39

+0

我添加了关于这个问题的细节。 – Luci 2010-08-26 07:06:20

+0

你的意思是你的数据库包含不正确的UTF-8?或者你的意思是你的数据库包含UTF-8,这是正确的,但是当你用Latin-1工具看它时,它看起来像?你可以显示你在那里的实际字节,特别是如果你不确定这是什么意思? – tripleee 2012-12-18 04:56:24

回答

0

,你可以尝试使用CGI模块,并进行

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

也许这取决于上下文的你试图逃跑的URI。
这在CGI上下文中适用于我。

当你添加了细节,我可以建议:


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

我承认我不太了解你的问题:你需要编码还是解码uri? – benzebuth 2010-08-25 15:49:52

0

网址转义不会帮助你在这里 - 这是转义的URL,在HTML不转义文本。你真正想要的是在你输出字符串时对它进行编码。请参阅Encode.pm内置库。确保你在HTTP头文件中正确使用了charset语句:“Content-Type:text/html; charset = UTF-8”或类似的东西。

如果你不走运,你可能还需要对字符串解码出数据库。这取决于数据库驱动程序和编码...