我有一个我正在处理的自定义查询,我需要能够查询输出值以及实际存储的值。
示例:
$string = "This is #*&^% a test";
$string = preg_replace(\'/[^(\\x20-\\x7F)]*/\',\'\', $string);
$string_clean = $string
因此,如果我回显$string\\u clean,我将得到以下结果:
This is a test
这很好,但问题是$string\\u clean值不是存储值(只是一个输出),所以我不知道如何在查询中使用它的值,因为查询结果是基于存储的数据库值。
Im使用wordpress查询的多数组功能(here). 基本上,我在数组中使用两个键和作为meta\\u比较。
理想情况下,我希望能够查询两个值(存储和输出)。我对这个搜索功能很感兴趣。
有人能帮我吗?我该怎么做?。或者如果有人知道更好的解决方案,请告诉我。
UPDATE:
这是我正在使用的代码。我找不到任何可靠的解决方案来实现REGEXP。从理论上讲,这应该做的是使用php
preg_replace
函数删除/替换字符串中的任何特殊字符,并查询新的干净字符串,然后将在查询的参数中使用该字符串。这是:
*变量的初始值通过一个简单的html表单(不包括)提交。
if(isset($_POST[\'providername\'])) {
$providername = $_POST[\'providername\'];
if (preg_match(\'/[\\\'^£$%&*()}{@#~?><>,|=_+¬-]/\', $providername))
{
$clean = $providername;
// Replace other special chars
$specialCharacters = array(
\',\' => \'\',
\'&\' => \'and\',
\'@\' => \'at\',
\'.\' => \'\',
\'+\' => \'\',
\'=\' => \'\',
\'/\' => \'\',
\'*\' => \'\',
\'!\' => \'\',
\'(\' => \'\',
\')\' => \'\',
\'$\' => \'\',
\'#\' => \'\',
\'%\' => \'\',
\'\\\'\' => \'\',
\'_\' => \'\',
\'^\' => \'\',
\'-\' => \'\'
);
while (list($character, $replacement) = each($specialCharacters)) {
$clean = str_replace($character, \'-\' . $replacement . \'-\', $clean);
}
// Remove all remaining other unknown characters
$clean = preg_replace(\'/[^a-zA-Z0-9\\-]/\', \' \', $clean);
$clean = preg_replace(\'/^[\\-]+/\', \'\', $clean);
$clean = preg_replace(\'/[\\-]+$/\', \'\', $clean);
$clean = preg_replace(\'/[\\-]{2,}/\', \'\', $clean);
if (preg_match(\'/[\\\'^£$%&*()}{@#~?><>,|=_+¬-]/\', $providername)) {
$providername = $clean;
} else {
$providername = $_POST[\'providername\'];
}
}
}
if(isset($_POST[\'providerloc\'])) {
$provider_location = $_POST[\'providerloc\'];
}
这是多数组参数:
$args = array(
\'count_total\' => true,
\'role\' => \'subscriber\',
\'offset\' => 8,
\'number\' => 8,
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'jabber\',
\'value\' => $provider_location,
\'compare\' => \'LIKE\'
) ,
array(
\'key\' => \'keywordcontent\',
\'value\' => $providername,
\'compare\' => \'LIKE\'
)
)
);
在测试这个解决方案之后,我在尝试搜索“干净”输出值时没有得到任何结果。
例如:
如果
$value = "G-P\'s Workin\' Barn";
应用后
preg_replace
, 输出将为。。。
GPs仓库工作
现在如果搜索“GPs Workin Barn”(输出值),则不会得到任何结果。但当我搜索“G-P’s Workin’Barn”(原始值)时,它会显示该术语的结果。因此,查询似乎无法处理输出值。正如我所想,这是有意义的,因为查询正在搜索数据库中存储的值。。。查询应该有一种方法来解释/转换输出值,并将其与存储值进行比较。在线搜索后,与我需要的内容相关的最接近的解决方案是post\\u where filter for posts[信用@稀有]。似乎没有针对用户的类似过滤器。即便如此,我还是需要一种使用REGEXP对实际变量值进行搜索的方法。
有什么想法或解决方案吗?谢谢