PHP-搜索,输入粗体字母
我正在尝试做一个搜索引擎,我在一个文本框中写下,例如,Mi,它选择并显示Mike Ross。但是,它不适用于空间。我写迈克,我得到迈克·罗斯,但当我写迈克时,我得到迈克·罗斯,没有胆量 口音也是如此。 所以我写了Jo,结果是João Carlos。如果我写Joa,结果是João Carlos没有任何大胆的部分。我想在写作时忽略重音,但仍然在结果中显示它们 这是我在选择后的脚本:PHP-搜索,输入粗体字母,php,mysqli,Php,Mysqli,我正在尝试做一个搜索引擎,我在一个文本框中写下,例如,Mi,它选择并显示Mike Ross。但是,它不适用于空间。我写迈克,我得到迈克·罗斯,但当我写迈克时,我得到迈克·罗斯,没有胆量 口音也是如此。 所以我写了Jo,结果是João Carlos。如果我写Joa,结果是João Carlos没有任何大胆的部分。我想在写作时忽略重音,但仍然在结果中显示它们 这是我在选择后的脚本: while($row = $result->fetch_array()) { $name =
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;
}
谢谢你的帮助
if (strtoupper($letters) == strtoupper($q))
对于空格,这将永远不会计算为true,因为您正在使用explode“”、trim$name从匹配的字母集中删除空格,从而有效地使任何带有与$letters不匹配的空格的$q值
这里有一个快速的例子,我认为你在寻找
<?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
非常感谢。这就解决了空间问题。“有什么办法可以解决重音问题吗?”通过进一步阅读更新了答案-答案并不漂亮,但很多人都以某种形式想出了解决办法。@Penny用一个半工作的重音匹配器更新了答案。值得注意的是,我不确定如何将重音恢复到返回字符串上。
<?php
$q = "Joa";
$name = "João Carlos";
$searchable_name = replace_accents($name);
if(stripos($searchable_name, $q) !== false)
{
$result = preg_replace("/($q)/i", '<strong>$1</strong>', $searchable_name);
print_r($result);
}
function replace_accents($str) {
$str = htmlentities($str, ENT_COMPAT, "UTF-8");
$str = preg_replace('/&([a-zA-Z])(uml|acute|grave|circ|tilde);/','$1',$str);
return html_entity_decode($str);
}