微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – str_replace(或preg_replace?)接受并保留重音字符和大写字母

我正在为一个网站构建一个法语 MySQL数据库,该网站将在某些地方包含重音字符和大写字母.所有这一切都很完美.

现在我设计了一个显示数据库内容的表(完美地工作),并在其上面放置了一个搜索栏.搜索SQL查询按预期工作(使用LIKE,它不区分大小写并将重音字符视为基本字母,这令人惊讶地完全符合我的要求).

这是我的问题:我想直接在表格中突出显示所有搜索实例.我得到了部分工作:

str_ireplace($_POST["search"],'<span class="highlight">' . $_POST["search"] . "</span>",$row['First_Name']);

但是这些问题会发生:

>它根据搜索输入更改表格中的大写字母
>如果用户忽略重音字符(在寻找“école”时搜索“ecole”),则搜索不起作用

我一直在寻找过去3个小时没有运气的解决方案.我开始阅读有关preg_replace()的内容,但似乎无法找到正确的方法,而无需为每个可能的重音字符编写无尽的代码.如果我可以模仿sql Query使用“LIKE”做什么但是在PHP或其他东西中会很棒.

你这样做,你将始终显示用户输入的内容,实际上PHP不会像MysqL LIKE那样进行相同的宽松比较.

这是我写的一个处理这个问题的函数,包括大多数法语重音字符.

function highlight_substring( $string,$substring )
{
  if( empty( $string ) || empty( $substring ) ) return false;

  $normal = array( 'à','é','è','ê','ë','î','ï','ô','ò','ö','û','ü','ù','ç' );
  $flat = array( 'a','e','i','o','u','c' );

  $str = mb_strtolower( $string );
  $str = str_replace( $normal,$flat,$str );

  $sub = mb_strtolower( $substring );
  $sub = str_replace( $normal,$sub );

  $pos = mb_strpos( $str,$sub );

  if( $pos !== false )
  {
    $var = mb_substr( $string,$pos ).'<span class="highlight">'.mb_substr( $string,$pos,mb_strlen( $substring ) ).'</span>';
    $var .= mb_substr( $string,( bcadd( mb_strlen( $substring ),$pos ) ) );
    $string = $var;
  }

  return $string;
}

随意适应和改善;)

用法

echo highlight_substring( 'Allons à l’école !','ecole' ); // user input 'ecole'
echo highlight_substring( 'Allons à l’École !','ecole' ); // user input 'ecole'
echo highlight_substring( 'Allons à l’école !','Ecole' ); // user input 'Ecole'

输出

Allons à l’<span class="highlight">école</span> !
Allons à l’<span class="highlight">École</span> !
Allons à l’<span class="highlight">école</span> !

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐