我正在使用PHP 5 / mySQL 5 / CodeIgniter,我有一个通过一系列过滤器构建SQL查询的系统。其中包括做LIKE的选项 - 例如公司名称包含ACS。这将生成SQL“company_name LIKE'%acs%'”。
此SQL以及创建它的过滤器规范存储在日志记录表中 - 但这是问题所在。 如果LIKE搜索与URL编码的HTML实体一致(在本例中为%AC - 生成的查询未保存,也不是过滤器。 SQL查询应该存储在数据库字段,但它在这个LIKE进来时切断:
SELECT blah FROM blah, blah, blah WHERE <other filters> AND company_name LIKE '
如果%通配符%并非巧合地以Unicode序列开头,则保存确定并进入查询确定。
如何解析数据库插入/转义这些序列以便它们正确存储?
编辑:通过PHP中的强制urlencode(),过滤器现在可以正确存储。然后我必须对它们进行urldecode以使它们恢复原始格式以进行编辑。不漂亮,但它确实有效。