如何在rails中的ilike上转义特殊字符,如%

Posted

技术标签:

【中文标题】如何在rails中的ilike上转义特殊字符,如%【英文标题】:How to escape special charaters like % on ilike in rails 【发布时间】:2021-11-17 02:29:09 【问题描述】:

如何在rails中使用ilike转义%、&等特殊字符

当我在搜索框中输入特殊字符(如 %,&)时出现错误,因为我的查询是 this book.where("book.name ilike ?", "%#options[:book_name]% ")

如何使用 ilike 转义特殊字符?

【问题讨论】:

【参考方案1】:

您可以使用sanitize_sql_like 清理您的查询:

book.where("book.name ILIKE ?", "%#sanitize_sql_like(options[:book_name])%")

【讨论】:

对不起,它没用,因为它给出了在搜索框中单独使用 % 的错误 能否请您发布日志文件中的完整错误消息? @JANARTHANANSHANMUGAM 发生错误时options[:book_name] 中的确切内容也很有用。 @spickermann ActionController::BadRequest(无效的查询参数:无效的 %-encoding (%)):这是我得到的错误 ActionController::BadRequest 不是数据库级错误消息。这是控制器级别的错误。这意味着我对如何在数据库查询中编码这些字符的回答没有任何问题。但是,问题是由表单发送到控制器的方式引起的。我建议为此打开一个新问题并发布您的表单外观以及您如何阅读控制器中的参数。【参考方案2】:

这可以通过.gsub 和regexp 来完成。

options =  book_name: '%Hello & W%orld!' 
options[:book_name].gsub(/[%&]/, '')
#=> "Hello  World!"

完整的解决方案如下:

book.where("book.name ILIKE ?", "%#options[:book_name].sub(/[%&]/, '')%")

【讨论】:

以上是关于如何在rails中的ilike上转义特殊字符,如%的主要内容,如果未能解决你的问题,请参考以下文章

如何让在Html中特殊字符不被转义

shell通配符特殊符号与转义符

如何转义变量中的特殊字符以在 bash 中提供命令行参数

Vue中js获取url参数,特殊字符的转译、逆转译

如何转义属性文件键中的特殊字符?

为啥html,xml的特殊符号转义不用斜杠,而要用& quot ;这样的奇怪形式?