6

我们让用户从单个文本输入中搜索数据库,我在过滤一些用户提供的字符串时遇到了困难。

例如,如果用户提交:

��������� lcd SONY

(注意?)我需要取消搜索。

我将上述字符串的 base64 编码版本包含在内,以便轻松运行:

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z"));

我以前忽略了这样的输入,但现在(不知道为什么)刚刚意识到 mysql 数据库查询几乎要永远执行,所以现在这是高度优先的。

另一个强调我们正在使用 utf-8 和 mb_detect_encoding 的例子没有多大帮助:

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU="));
ΠΛυντηριο ρουχ�%

所以:

  • 如何检测/过滤这些输入?
  • 这个输入是如何产生的?
4

2 回答 2

1

你不应该得到那个,虽然如果你真的想过滤(我不推荐),检查字母数字以及“-.;”等。

您可以使用其中一些功能来帮助您进行过滤过程。

http://www.php.net/manual/en/function.ctype-alnum.php

于 2010-04-12T15:52:54.933 回答
0

如果您在创建与 mysql 的连接后执行这些查询,它应该可以很好地处理 utf-8 输入和结果,而不会吐出?

mysql_query("SET character_set_client=utf8", $mysqlConn);
mysql_query("SET character_set_connection=utf8", $mysqlConn);
mysql_query("SET character_set_results=utf8", $mysqlConn);

(假设数据库设置为 utf-8 并且如果它们不变成?你不介意不过滤它们)

(同样假设你使用的是 mysql,其他 dbms 可能也有类似的功能)

于 2010-04-12T16:51:19.230 回答