我想弄清楚为什么当我在搜索中输入点 (.) 时,它会突出显示搜索结果的每个字符(它将每个字符包装在 <span class="search-highlight"></span>
中)并且它也只显示 3 张票很奇怪,因为它们中至少有一个点:
进行实际搜索(连同变量)的查询是:
$q = mysql_real_escape_string($_GET['q']);
$query = trim(strtoupper($q));
$query = htmlentities($query, ENT_QUOTES, "UTF-8");
$construct = $is_employee==false ? "user='$userid' AND" : "";
$tickets_result = mysql_query("SELECT `id`, `subject`, `message`, `timestamp`, `user` FROM `tickets` WHERE $construct (upper(subject) LIKE '%".$query."%' OR upper(message) LIKE '%".$query."%')") or trigger_error(mysql_error());
还有我的highlight
类:
class highlight
{
public $output_text;
function __construct($text, $words) {
$split_words = explode(" ", $words);
foreach ($split_words as $word) {
$text = preg_replace("|($word)|Ui",
"<span class=\"search-highlight\">$1</span>",
$text);
}
$this->output_text = $text;
}
}
有谁知道简单的点 (.) 为何或如何导致此问题,是否有可能修复?
提前感谢您的帮助。
最佳答案
这里“有问题”的是 preg_replace
。 .
是一个通配符,所以它匹配任何东西。
在将输入字符串放入正则表达式之前,您可能希望对输入字符串运行 preg_quote
。
关于php - MySQL 查询中的点 (.) 应该做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9879145/