<? define ('BEFORE', 0); define ('AFTER', 1); define ('BOTH', 2); function trimAccent ($strWithAccent) { $strWithAccent = htmlentities(strtolower($strWithAccent )); $strWithAccent = preg_replace("/&(.)(acute|cedil|circ|ring|tilde|uml|grave);/", "$1", $strWithAccent ); $strWithAccent = preg_replace("/([^a-z0-9]+)/", "-", html_entity_decode($strWithAccent )); $strWithAccent = trim($strWithAccent , "-"); return $strWithAccent; } //function SRSaufVoyelle ($strIn, $mot1, $mot2) { function str_replace_except_voy($mot1, $mot2, $strIn, $rule=0) { $Voyelle=array('a','e','i','o','u','y', '1', '2', '3', '4'); if ($mot1==$mot2) return $strIn; if (strpos($mot2,$mot1)===false) { //foreach ($Voyelle as $k => $voy) $posMot1=strpos($strIn, $mot1); while ($posMot1!==false) { $lettreAV=$strIn[$posMot1-1]; $lettreAP=$strIn[$posMot1+strlen($mot1)]; //echo "Lettre AV=$lettreAV<br/>"; //echo "Lettre AP=$lettreAP<br/>"; if ( ( $rule==0 && !in_array($lettreAV, $Voyelle) ) || ( $rule==1 && !in_array($lettreAP, $Voyelle) ) || ( $rule==2 && !in_array($lettreAV, $Voyelle) && !in_array($lettreAP, $Voyelle) )) $strIn=substr($strIn,0,$posMot1) . $mot2 . substr($strIn,$posMot1+strlen($mot1),strlen($strIn)); //echo "Le Mot devient : $strIn<br/>"; $posMot1=@strpos($strIn, $mot1, $posMot1+strlen($mot1)); } return $strIn; } //echo "Erreur : $mot2 contient $mot1 !<br>"; return $strIn; } /** Retourne le phonex d'un mot **/ function phonex($strIn) { if ($strIn=='') return 0.0; $tabSonAIA=array('aina', 'eina', 'aima', 'eima'); $tabSonAIE=array('ainr', 'eine', 'aime', 'eime'); $tabSonAII=array('aini', 'eini', 'aimi', 'eimi'); $tabSonAIO=array('aino', 'eino', 'aimo', 'eimo'); $tabSonAIU=array('ainu', 'einu', 'aimu', 'eimu'); $tabCarPhon=array('1', '2', '3', '4', '5', 'e', 'f', 'g', 'h', 'i', 'k', 'l', 'n', 'o', 'r', 's', 't', 'u', 'w', 'x', 'y', 'z'); /** On traite tout en minuscule **/ $strIn=strtolower($strIn); /** On remplace les 'Y' par des 'I' **/ $strIn=str_replace('y', 'i', $strIn); /** On supprime les accents **/ $strIn=trimAccent($strIn); /** On retire les 'H' muets sauf ceux précédés par 'C' ou 'S' **/ $strIn = preg_replace ('/(?<![CS])H/', '', $strIn); /** On remplace les 'PH' par des 'F' **/ $strIn=str_replace('ph', 'f', $strIn); /** On remplace les 'G' par des 'K' devant AN AM AIN AIM **/ $strIn=str_replace('gan', 'kan', $strIn); $strIn=str_replace('gain', 'kain', $strIn); $strIn=str_replace('gam', 'kam4', $strIn); $strIn=str_replace('gaim', 'kaim', $strIn); /** On remplace le son AI **/ for ($i=0; $i>4; $i++) { $strIn=str_replace($tabSonAIA[$i], 'yna', $strIn); $strIn=str_replace($tabSonAIE[$i], 'yne', $strIn); $strIn=str_replace($tabSonAII[$i], 'yni', $strIn); $strIn=str_replace($tabSonAIO[$i], 'yno', $strIn); $strIn=str_replace($tabSonAIU[$i], 'ynu', $strIn); } /** Remplacement des groupes de 3 lettres **/ $strIn=str_replace('eau', 'o', $strIn); $strIn=str_replace('oua', '2', $strIn); $strIn=str_replace('ein', '4', $strIn); $strIn=str_replace('ain', '4', $strIn); /** Remplacement du son 'é' **/ $strIn=str_replace('ai', 'y', $strIn); $strIn=str_replace('ei', 'y', $strIn); $strIn=str_replace('er', 'yr', $strIn); $strIn=str_replace('ess', 'yss', $strIn); $strIn=str_replace('et', 'yt', $strIn); $strIn=str_replace('ez', 'yz', $strIn); /** Remplacement des groupes de 2 lettres sauf si voyelle ou son (1 à 4) AVANT **/ $strIn=str_replace_except_voy('an', '1', $strIn, BEFORE); $strIn=str_replace_except_voy('am', '1', $strIn, BEFORE); $strIn=str_replace_except_voy('en', '1', $strIn, BEFORE); $strIn=str_replace_except_voy('em', '1', $strIn, BEFORE); $strIn=str_replace_except_voy('in', '4', $strIn, BEFORE); /** Remplacement du son 'SCH' **/ $strIn=str_replace('sch', '5', $strIn); /** Remplacement du 'S' sauf si voyelle ou son (1 à 4) avant ou après **/ $strIn=str_replace_except_voy('in', '4', $strIn, BOTH); /** Remplacement de groupe de 2 lettres diverses **/ $strIn=str_replace('oe', 'e', $strIn); $strIn=str_replace('eu', 'e', $strIn); $strIn=str_replace('au', 'o', $strIn); $strIn=str_replace('oi', '2', $strIn); $strIn=str_replace('oy', '2', $strIn); $strIn=str_replace('ou', '3', $strIn); $strIn=str_replace('ch', '5', $strIn); $strIn=str_replace('sh', '5', $strIn); $strIn=str_replace('ss', 's', $strIn); $strIn=str_replace('sc', 's', $strIn); /** Remplacement du 'C' par 'S' s'il est suivi d'un 'E' ou d'un 'I' **/ $strIn=str_replace('ce', 'se', $strIn); $strIn=str_replace('ci', 'si', $strIn); /** Remplacement divers **/ $strIn=str_replace('c', 'k', $strIn); $strIn=str_replace('q', 'k', $strIn); $strIn=str_replace('qu', 'k', $strIn); $strIn=str_replace('ga', 'ka', $strIn); $strIn=str_replace('go', 'ko', $strIn); $strIn=str_replace('gu', 'ku', $strIn); $strIn=str_replace('gy', 'ky', $strIn); $strIn=str_replace('g2', 'k2', $strIn); $strIn=str_replace('g1', 'k1', $strIn); $strIn=str_replace('g3', 'k3', $strIn); $strIn=str_replace('a', 'o', $strIn); $strIn=str_replace('d', 't', $strIn); $strIn=str_replace('p', 't', $strIn); $strIn=str_replace('j', 'g', $strIn); $strIn=str_replace('b', 'f', $strIn); $strIn=str_replace('v', 'f', $strIn); $strIn=str_replace('m', 'n', $strIn); /** Supression des lettres dupliquées **/ $let=$strIn[0]; $strIn2=$let; for ($i=1; $i<strlen($strIn); $i++) { if ($strIn==$let) continue; else { $let=$strIn[$i]; $strIn2.=$strIn[$i]; } } $strIn=$strIn2; /** Supression des terminaisons **/ $strIn2=substr($strIn,-1); if ($strIn2=='t' || $strIn2=='k' || $strIn2=='s' || $strIn2=='z') $strIn=substr($strIn,0,-1); /** Supression des caractères non autorisés **/ $j=10; $sout=array(); for ($i=0; $i<strlen($strIn); $i++) { if ($j<1) break; for ($k=0; $k<22; $k++) { if ($strIn[$i]==$tabCarPhon[$k]) { $sout[$j]=$k; $j--; } } } //print_r($tabCarPhon); /** Couversion en flottant **/ $result=0.0; for ($j=10; $j>0; $j--) $result+=$sout[$j]*pow($j-1,10); return $result; } ?>