如果我搜索tOm ArNfElD
并且$variable
是“Tom Arnfeld”,我会LIKE
在 MySQL 中得到很好的结果形式(不区分大小写)。
如何将匹配的文本包装在$variable
a<span></span>
中以突出显示与查询匹配的搜索部分?我需要保留原来的情况$variable
。
如果我搜索tOm ArNfElD
并且$variable
是“Tom Arnfeld”,我会LIKE
在 MySQL 中得到很好的结果形式(不区分大小写)。
如何将匹配的文本包装在$variable
a<span></span>
中以突出显示与查询匹配的搜索部分?我需要保留原来的情况$variable
。
我会使用正则表达式:
$text = preg_replace('~(' . preg_quote($search, '~') . ')~i', '<span>$1</span>', $text);
还有其他方法,例如一种灵魂融合建议(str_ireplace()
):
$text = str_ireplace($search, '<span>' . $search . '</span>', $text);
$textToPrint = preg_replace("/({$variable})/i","<span class"myclass">$1</span>,$text);
这可能会有所帮助
如果str_ireplace()
要替换整个字符串或将 LIKE 参数转换为正则表达式并使用preg_replace()
(但不要忘记preg_quote()
字符串),则可以使用。
使用正则表达式的示例:
$parts = explode('%', $likeQuery)
foreach ($parts as &$innerString) {
$innerParts = explode('_', $innerString);
foreach ($innerParts as &$part) {
$part = preg_quote($part, '/');
}
// always unset references when you're done with them
unset($part):
$innerString = implode('.', $innerString);
}
// always unset references when you're done with them
unset($innerString):
$regex = implode('.*?', $parts);
$transformedString = preg_replace("/$regex/", '<span>$0</span>', $stringToTransform);