Php 正在搜索中删除%40

Php 正在搜索中删除%40,php,mysql,search,urlencode,Php,Mysql,Search,Urlencode,我正在尝试使用此代码返回电子邮件地址作为搜索关键字,以便在表单中搜索时调出搜索结果。但是关键字以用户%40domain.com的身份在浏览器中发布。我需要它注册为user@domain.com因此数据库mysql查询可以在数据库中找到它。这是现在的代码,但它不起作用 if (isset($_GET['search']) && tep_not_null($_GET['search'])) { $keywords = tep_db_input(tep_db_prep

我正在尝试使用此代码返回电子邮件地址作为搜索关键字,以便在表单中搜索时调出搜索结果。但是关键字以用户%40domain.com的身份在浏览器中发布。我需要它注册为user@domain.com因此数据库mysql查询可以在数据库中找到它。这是现在的代码,但它不起作用

   if (isset($_GET['search']) && tep_not_null($_GET['search'])) {
      $keywords = tep_db_input(tep_db_prepare_input($_GET['search']));
      $search = "where c.customers_lastname like '%" . $keywords . "%' or c.customers_email_address like '%" . urlencode($keywords) . "%'";
    }

%40相当于@。它会被转换,因为您使用了
urlencode()
。如果要在将其显示到页面之前将其转换回原处,请使用
urldecode()

希望这有帮助

两者都有,并且有一个基本的答案——使用
urldecode()
——但是它们忽略了一个关键点——您已经直接从用户那里对输入进行了所有输入清理。如果要在此例程中提供URL解码,必须在解码输入后执行输入清理。否则,正确清理并随后进行URL解码的输入可能会引入错误


切换到以避免考虑输入清理——只要正确使用参数化语句,您就不会编写易受注入攻击的程序。

或者,您知道,一开始就不要这样做。是的,但是谁知道呢,也许询问者这样做是有原因的?我不是一个可以判断的人,但我在这一点上和你是一致的。你基本上是对的,除了两点:1)OP使用了一些我们一无所知的DB抽象库,2)OP实际上是对输入进行编码。明白了。我什么都不用做。对不起@艾布拉姆斯:两个观点都很好。我假设组合
tep\u db\u input(tb\u dp\u prepare\u input())
负责输入消毒。我还假设在这个例子中,
urlencode()
是一个错误。感谢您提出投诉。:)