PHP - 搜索,用粗体写的字母

时间:2014-12-31 15:40:09

标签: php mysqli

我正在尝试使用文本框写一个搜索引擎,例如“Mi”,然后选择并显示“ Mi ke Ross”。然而,它不适用于空间。我写"Mike"然后我得到“ Mike Ross”,但当我写“Mike”时,我得到了“Mike Ross”(没有大胆)。

口音也是如此。 所以我写“Jo”,结果是“ Jo ãoCarlos”。如果我写“Joa”,结果是“JoãoCarlos”(没有任何大胆的部分)。我想在写作时忽略重音,但仍然会在结果中显示它们。

所以这是我在SELECT之后的脚本:

 while($row = $result->fetch_array()) {
        $name = $row['name'];
        $array = explode(' ',trim($name));
        $array_length = count($array);

        for ($i=0; $i<$array_length; $i++ ) {
            $letters = substr($array[$i], 0, $q_length);

            if (strtoupper($letters) == strtoupper($q)) {
                $bold_name = '<strong>'.$letters.'</strong>';
                $final_name = preg_replace('~'.$letters.'~i', $bold_name, $array[$i], 1);
                $array[$i] = $final_name; 
        } 
         array[$i] = array[$i]." ";
        }
    foreach ($array as $t_name) { echo $t_name;
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

if (strtoupper($letters) == strtoupper($q))

由于您要使用explode(' ', trim($name)从可匹配字母集中删除空格,因此永远不会将空格评估为“true”,从而有效地使$q的任何值具有与{{1}无法匹配的空格}

这是一个快速示例,可以完成我认为您正在寻找的内容

$letters

从我所知道的(一个快速的谷歌“替换重音字符PHP”),你有点运气不好。 This question使用<?php $q = "Mike "; // User query $name = "Mike Ross"; // Database row value if(stripos($name, $q) !== false) // Case-insensitive match { // Case-insensitive replace of match with match enclosed in strong tag $result = preg_replace("/($q)/i", '<strong>$1</strong>', $name); print_r($result); } // Result is // <strong>Mike </strong>Ross 提供快速解决方案,而this tip使用与strtr类似的方法。

不幸的是,这些依赖于预定义的字符集,因此您尚未准备好的传入重音会失败。您可能最好依靠用户在搜索时输入特殊字符,或者创建一个具有“可搜索”名称的新列,并尽可能地替换重音字符,并将实际名称作为“匹配”显示返回字段。

再注意

found another solution可以完成你想要的大部分工作,除了返回的名字没有重音。但是,它将使用非重音搜索匹配DB中的重音值。修改后的代码是:

str_replace