php替换ascii代码


php replacing ascii code

我遇到了一个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编写的。

感谢

  1. 不要将整个SQL查询从Javascript客户端发送到服务器。只是不要。这比SQL注入漏洞更糟糕,它只是由任何人全权执行查询
  2. 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