我正在为一个网站构建一个法语
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 举报,一经查实,本站将立刻删除。