<?php
mb_internal_encoding('UTF-8');
$full_string = 'ĂȘtre vivant';
$match = 'vivant'; //) is ĂȘtr<strong>e viva</strong>nt
echo Foo::highlightTerm($full_string, $match);
class Foo{
public static function highlightTerm($full_string, $match){
$full_string_ascii = preg_replace_callback('/[\w]+/ui', array('self', 'callbackHighlightTerm'), $full_string);
$match_ascii = preg_replace_callback('/[\w]+/ui', array('self', 'callbackHighlightTerm'), $match);
/**/var_dump($full_string_ascii, $match_ascii);
$start = stripos($full_string_ascii, $match_ascii);
if($start===FALSE){
return $full_string;
}else{
$length = mb_strlen($match);
return
htmlspecialchars( mb_substr($full_string, 0, $start)) .
'<strong>' . htmlspecialchars( mb_substr($full_string, $start, $length) ) . '</strong>' .
htmlspecialchars( mb_substr($full_string, $start+$length) );
}
}
private static function callbackHighlightTerm($matches){
return preg_replace('/[^\w]/i', '', iconv('UTF-8', 'ASCII//TRANSLIT', $matches[0]));
}
}
?>
preferences:
38.98 ms | 402 KiB | 5 Q