编码问题?

我想我有一个URL编码问题。我需要使用Javascript打开一个窗口并向其传递SQL Select查询。所以我这样做了:
window.open('view_query.php?sql_query=' + query + '&db_name=' + db_name);
这对我有用,但我有一个查询打破了这个:
SELECT a FROM table WHERE field like '%adhoc%' 
现在,当新窗口打开并打印从URL GET变量收到的查询时,它看起来像这样:
SELECT a FROM table WHERE field like '�hoc%' 
请注意,位
%ad
已变为无法识别的字符!为什么? 我试过用URL编码来解决这个问题,但由于我需要
%
符号,所以我不能使用很多URL编码器,因为它们会把它变成别的东西?! 谢谢大家的帮助。     
已邀请:
%
字符用于使用字符代码对URL中的字符进行编码。序列
%ad
表示十六进制字符代码0xAD或十进制173的字符。 使用encodeURIComponent函数来转义URL的值:
window.open('view_query.php?sql_query=' + encodeURIComponent(query) + '&db_name=' + encodeURIComponent(db_name));
为了确保您(以及阅读此内容的任何人)都了解它,我还要指出通过浏览器发送SQL代码的风险。使用该系统的任何人都可以发送任何内容作为查询,包括例如drop table。     
使用http://pl.php.net/urlencode对您的查询进行编码。然后使用http://pl.php.net/urldecode对其进行解码(如果需要,PHP应该自动为您执行此操作)     
这是因为url编码 - 你需要调用
window.open('view_query.php?sql_query='+encodeURICompoent(query)+'&db_name...)
; 然后在PHP方面
$query = rawurldecode($_GET['sql_query']);
    

要回复问题请先登录注册