Php url解码,数据解码错误

Php url解码,数据解码错误,php,url-encoding,Php,Url Encoding,在我的项目中,我需要使用urlencode在GET变量中传递一个简单而简短的查询 在我执行URL解码之后,一些字符似乎被修改了,因此没有返回任何数据库结果 我想知道是否有人能帮我确定这是为什么以及如何解决这个问题 非常感谢 在URL编码之前: ((u.firstname,如'%Carol%')和(u.lastname,如'%Enriquez%')) URL结束后: %28%28u.firstname+LIKE++%27%25Carol%25%27%29+和+%28u.lastname+LIKE+

在我的项目中,我需要使用urlencode在GET变量中传递一个简单而简短的查询

在我执行URL解码之后,一些字符似乎被修改了,因此没有返回任何数据库结果

我想知道是否有人能帮我确定这是为什么以及如何解决这个问题

非常感谢

在URL编码之前:

((u.firstname,如'%Carol%')和(u.lastname,如'%Enriquez%'))

URL结束后:

%28%28u.firstname+LIKE++%27%25Carol%25%27%29+和+%28u.lastname+LIKE++%27%25Enriquez%25%27%29++

URL解码后:


((u.firstname,如“Êrol%”)和(u.lastname,如“%Enriquez%”)

如果对其解码两次,则会发生这种情况

注意:


%
是URL编码中使用的特殊字符。
%Ca
可能是
Ê

它对我来说工作正常-我复制/粘贴了您的编码字符串,并从
urldecode()获得了预期的输出
。哦……你为什么要在URL中发送SQL代码段?!听起来是个坏主意。看起来你要解码两次。在页面之间传递名字和姓氏,然后在应用程序中生成查询,在生成SQL语句时不要忘记转义参数或使用绑定。查找“mysql sql injection example php”,您应该很快就明白了……php已经对
$\u get
中的值进行了URL解码。因此无需通过
urldecode
传递它们。感谢您的回复。但是,我100%没有调用
urldecod()
两次。解码函数不在任何类型的循环或任何东西中,我想知道为什么最终结果表明它被解码了两次?我相信你是正确的,我只是不明白这是为什么。记住GET参数是为你解码的。所以你通常不需要(再次)解码它。但一定要验证这一点。+1,你完全正确!删除
urldecode()
解决了问题,我想它是自动解码的。
var_dump(urldecode(urlencode("((u.firstname LIKE '%Carol%') AND (u.lastname LIKE '%Enriquez%')")));
var_dump(urldecode(urldecode(urlencode("((u.firstname LIKE '%Carol%') AND (u.lastname LIKE '%Enriquez%')"))));

string(64) "((u.firstname LIKE '%Carol%') AND (u.lastname LIKE '%Enriquez%')"
string(62) "((u.firstname LIKE '�rol%') AND (u.lastname LIKE '%Enriquez%')"