1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| # Supprime tous les accents possibles et inimaginables
function cleanAccent($sToClean)
{
$sToClean = mb_ereg_replace('[àâäåãáÂÄÀÅÃÁæÆ]', 'a', $sToClean);
$sToClean = mb_ereg_replace('[ß]', 'b', $sToClean);
$sToClean = mb_ereg_replace('[çÇ]', 'c', $sToClean);
$sToClean = mb_ereg_replace('[Ð]', 'd', $sToClean);
$sToClean = mb_ereg_replace('[éèêëÉÊËÈ]', 'e', $sToClean);
$sToClean = mb_ereg_replace('[ïîìíÏÎÌÍ]', 'i', $sToClean);
$sToClean = mb_ereg_replace('[ñÑ]', 'n', $sToClean);
$sToClean = mb_ereg_replace('[öôóòõÓÔÖÒÕ]', 'o', $sToClean);
$sToClean = mb_ereg_replace('[]', 's', $sToClean);
$sToClean = mb_ereg_replace('[ùûüúÜÛÙÚ]', 'u', $sToClean);
$sToClean = mb_ereg_replace('[¥Ýýÿ]', 'y', $sToClean);
$sToClean = mb_ereg_replace('[]', 'z', $sToClean);
return $sToClean;
}
#
# strLight(string $str, array $words, string $startTag, string $endTag)
#
# Applique les tags $startTag et $endTag aux mots trouvés dans la chaine $str
# Retourne la chaine formatée avec les nouveaux tags
#
function strLight($str, $words, $startTag, $endTag)
{
$encoding = 'UTF-8';
$original = $str;
$str = mb_strtolower(cleanAccent($str), $encoding);
$tagLen = (mb_strlen($startTag, $encoding) + mb_strlen($endTag, $encoding));
foreach($words as $word)
{
$word = mb_strtolower(cleanAccent($word), $encoding);
$current = $offset = $delta = 0;
$len = mb_strlen($word, $encoding);
while(( FALSE !== ($pos = mb_strpos($str, $word, $offset, $encoding))))
{
$original = mb_substr($original, 0, ($pos + $delta), $encoding)
.$startTag.mb_substr($original, ($pos + $delta), $len, $encoding).$endTag
.mb_substr($original, ($pos + $delta + $len), mb_strlen($original) - ($pos + $delta + $len), $encoding);
$delta += $tagLen; // Rajout de la longueur de chaine des tags
$offset = $pos + 1;
}
}
return $original;
}
$words = array('methode','Vérite');
$str = 'La vérité sur les méthodes. Méthode avec des majuscules ? Méthodologique ne match pas. Et methode sans accents ?';
$startTag = '<b>';
$endTag = '</b>';
echo strLight($str, $words, $startTag, $endTag); |
Partager