加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-31 00:56:28 所属栏目:PHP 来源:互联网
导读:我正在为一个网站构建一个法语 MySQL数据库,该网站将在某些地方包含重音字符和大写字母.所有这一切都很完美. 现在我设计了一个显示数据库内容的表(完美地工作),并在其上面放置了一个搜索栏.搜索的SQL查询按预期工作(使用LIKE,它不区分大小写并将重音字符视为

我正在为一个网站构建一个法语 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> !

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读