<?
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;
	}
	
 ?>