在使用PHP中的值之前,如何清理查询字符串?

在使用PHP中的值之前,如何清理查询字符串?,php,forms,character-encoding,Php,Forms,Character Encoding,我们有一个网站,允许用户在搜索框中输入他们的汽车登记。我们刚从网站上得到一些错误,因为一些狡猾的字符也被粘贴到搜索框中: vrm=AB55CBX%E2%80%8F 因此,车牌号为“AB55CBX”,但由于某种原因,字符串“%E2%80%8F”中添加了以下内容 我的代码在尝试查询数据库中的号码牌时引发了此错误: Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1

我们有一个网站,允许用户在搜索框中输入他们的汽车登记。我们刚从网站上得到一些错误,因为一些狡猾的字符也被粘贴到搜索框中:

vrm=AB55CBX%E2%80%8F

因此,车牌号为“AB55CBX”,但由于某种原因,字符串“%E2%80%8F”中添加了以下内容

我的代码在尝试查询数据库中的号码牌时引发了此错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='' in

我应该做些什么来清理这个?我已经在使用PDO并在执行之前绑定该值。

这看起来像是字符的url编码,请在查询之前尝试urldecode()
谢谢你的回答。我认为preg_replace有效,因此我使用了以下方法:

$vrm = preg_replace('/[^A-Za-z0-9-]/', '', $vrm);

这3个字符被称为“从右到左标记(RLM)是一种非打印字符,用于包含从左到右混合脚本的双向文本的计算机排版”-来源:-您需要限制用户在字段中输入的内容。请参阅或谷歌“从右到左标记(RLM)”以进一步了解这项研究。很有趣!这只是一个文本输入。你的意思是控制它的前端,后端或两者?你推荐什么?preg_match是一个想法还是只允许字母和数字仍然允许包含RLM中的数字?从A到Z进行控制。您可以使用
preg_match
-regex将输入限制为标准字母和数字。类似于
如果(!preg_match('/^[A-Za-z][A-Za-z0-9]/',$var))
请参阅此问答,了解仅匹配字母和数字的信息。一个例子显示了
preg_match(“/^[a-zA-Z0-9]+$/”,$value)
-RLM不应该出现在那里,因为它不是标准字体的一部分。您也可以使用
str_replace(“%E2%80%8F”,”,“$var)