web-dev-qa-db-fra.com

Convertir les caractères accentués en leurs équivalents ascii

Je dois convertir des caractères français en anglais sur mon php. J'ai utilisé le code suivant:

iconv("utf-8", "ascii//TRANSLIT", $string);

Mais le résultat pour ËËË était "E"E"E.

Je n'ai pas besoin de cette double citation ni d'autres caractères supplémentaires - je souhaite afficher une sortie telle que EEE. Existe-t-il une autre méthode pour convertir le français en anglais? Pouvez-vous m'aider à le faire?

22
ram

Le PHP Manuel iconv Intro a un avertissement:

Notez que la fonction iconv sur certains systèmes peut ne pas fonctionner comme vous le voulez attendre. Dans ce cas, il serait judicieux d’installer le GNU libiconv bibliothèque. Cela aboutira probablement à des résultats plus cohérents.

Mais si les caractères accentués sont le seul problème, vous pouvez utiliser un strtr sale (partiellement à partir de strtr comments ):

$string = 'Ë À Ì Â Í Ã Î Ä Ï Ç Ò È Ó É Ô Ê Õ Ö ê Ù ë Ú î Û ï Ü ô Ý õ â û ã ÿ ç';

$normalizeChars = array(
    'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A',
    'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I',
    'Ï'=>'I', 'Ñ'=>'N', 'Ń'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U',
    'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a',
    'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i',
    'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ń'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u',
    'ú'=>'u', 'û'=>'u', 'ü'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f',
    'ă'=>'a', 'î'=>'i', 'â'=>'a', 'ș'=>'s', 'ț'=>'t', 'Ă'=>'A', 'Î'=>'I', 'Â'=>'A', 'Ș'=>'S', 'Ț'=>'T',
);

//Output: E A I A I A I A I C O E O E O E O O e U e U i U i U o Y o a u a y c
echo strtr($string, $normalizeChars);
38
Ing

Cela a fonctionné pour moi pour les caractères français.

$str = utf8_encode($str);
$str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
17
Ayoub

Une alternative: 

function replaceAccents($str) {

  $search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,ø,Ø,Å,Á,À,Â,Ä,È,É,Ê,Ë,Í,Î,Ï,Ì,Ò,Ó,Ô,Ö,Ú,Ù,Û,Ü,Ÿ,Ç,Æ,Œ");

  $replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,o,O,A,A,A,A,A,E,E,E,E,I,I,I,I,O,O,O,O,U,U,U,U,Y,C,AE,OE");

  return str_replace($search, $replace, $str);
}


$str = "À é ü ä ç";
$str = replaceAccents($str);
echo "$str \n"; 
//output "A e u a c" 
6
tong

Voici la façon wordpress:

http://codex.wordpress.org/Function_Reference/remove_accents

Vous pouvez copier la fonction remove_accents () et l'implémenter dans votre système.

https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/formatting.php#L682

3
ecabuk

Dans laravel, vous pouvez simplement utiliser str_slug($accentedPhrase) et si vous tenez à dash (-) que cette méthode remplace par un espace, vous pouvez utiliser str_replace('-', ' ', str_slug($accentedPhrase)).

0
aPa