我遇到了一个php问题。我必须发送一个带有POST表单的sql查询和一个ajax请求。此查询类似于:
SELECT * FROM table WHERE field LIKE '%512%'
问题是,当我从php中的POST var中取回这个查询时,它显示:
SELECT * FROM table WHERE field LIKE 'Q2%'
它显然失败了。。。
我试着换成utf-8,但没有改变任何东西。
Javascript似乎发送了正确的文本,但php在读取POST时更改了它。
有没有一种方法可以防止php将%51读取为ascii代码?
以防万一,这个网站是用Code Igniter编写的。
感谢
- 不要将整个SQL查询从Javascript客户端发送到服务器。只是不要。这比SQL注入漏洞更糟糕,它只是由任何人全权执行查询
- HTTP请求中的数据通常使用percentencoding进行编码,猜猜看:
%51
在这种编码中恰好代表"Q"。在HTTP请求中发送数据时,需要对数据进行正确编码,例如使用encodeURIComponent()
。如果您想发送"%51",您需要实际发送%2551
。具体情况将取决于您如何准确发送数据
也可以考虑阅读《大逃亡》(或者:在文本中处理文本需要知道什么)。
虽然你可以使用%25512%
,但我同意decze。
使用%25
将被解释为%
符号
所以使用%25Your number
POST数据:URL编码将不安全的ASCII字符替换为后跟两个十六进制数字的"%"
第一:使用javascript函数对数据进行编码。
var res = encodeURI("SELECT * FROM table WHERE field LIKE '%512%'");
然后使用ajax发送数据。
在PHP中,使用以下函数解码数据:
$data=urldecode(string $_POST['yourdata']);
有关更多信息,您可以访问以下链接:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
- http://php.net/manual/en/function.urldecode.php
- http://ascii.cl/htmlcodes.htm