aur*_*ora 1 full-text-search sphinx escaping
在sphinx changelog中它说0.9.8:
"添加了查询转义支持查询语言和EscapeString()API调用"
我可以假设,还应该支持为sphinxQL转义特殊的狮身人面像字符(@,!, - ,...)吗?如果是这样,也许有人可以指出我这方面的一个例子.我无法在文档或网络上的其他地方找到任何相关信息.
如果搜索短语包含一个特殊字符,你如何进行全文搜索(使用spinxQL)?我不喜欢在索引编制过程中"掩盖"它们的想法.
谢谢!
jgi*_*les 13
sphinxapi转义函数的PHP版本在测试中对我不起作用.此外,它不提供针对SQL注入类型字符的保护(例如单引号).
我需要这个功能:
function EscapeSphinxQL ( $string )
{
$from = array ( '\\', '(',')','|','-','!','@','~','"','&', '/', '^', '$', '=', "'", "\x00", "\n", "\r", "\x1a" );
$to = array ( '\\\\', '\\\(','\\\)','\\\|','\\\-','\\\!','\\\@','\\\~','\\\"', '\\\&', '\\\/', '\\\^', '\\\$', '\\\=', "\\'", "\\x00", "\\n", "\\r", "\\x1a" );
return str_replace ( $from, $to, $string );
}
Run Code Online (Sandbox Code Playgroud)
请注意Sphinx特定字符上的额外反斜杠.我认为发生的是他们将整个查询通过一个SQL解析器,它为SQL目的删除了逃避反斜杠的"无关"(即'\&' - >'&').然后,它将MATCH子句放入全文解析器,突然'&'是一个特殊字符.因此,您需要在开头添加额外的反斜杠.
小智 5
在每个API(php/python/java/ruby)中都有相应的函数EscapeString,但为了使用SphinxQL进行转义,你必须在应用程序中编写类似的东西,因为SphinxQL没有这样的功能.
该功能本身是在线的
def EscapeString(self, string):
return re.sub(r"([=\(\)|\-!@~\"&/\\\^\$\=])", r"\\\1", string)
Run Code Online (Sandbox Code Playgroud)
您可以轻松将其转换为您的应用程序的代码.