Pokemon_JOJO

Le Blog du Pokemon !

“Et non ce n'est pas un blog sur les pokemons! Ici, vous trouverez des articles sur la programmation (JavaScript, CSS, et PHP), ainsi que d'autres choses plus ou moins utiles souvent en rapport avec Linux... ou pas”
07
juil

PHP – Remplacer les caractères spéciaux et accents par leur correspondance ASCII

Publi dans PHP, ajouter un commentaire, ou faire un trackback.

Voici une fonction pour enlever tous les caractères spéciaux et accents d’une chaîne de caractères en respectant l’encodage. (fonctionne pour l’UTF8). Les caractères sont remplacés par leur plus proche correspondance ASCII (sans accent)

function strtoascii()

/**
 * Remplace les caractères spéciaux par leur plus proche
 * correspondance ASCII (sans accent)
 * 
 * @info http://www.mibhouse.org/pokemon_jojo
 *
 * @param string $str
 * @param string $encoding
 *
 * @return string $str
 */
function strtoascii($str, $encoding = 'utf-8') {
	mb_regex_encoding($encoding); // jeu de caractères courant pour les expressions rationnelles. 
 
	// Tableau des corespondance
	$str_ascii = array(
		'A'		=> 'ÀÁÂÃÄÅĀĂǍẠẢẤẦẨẪẬẮẰẲẴẶǺĄ',
		'a'		=> 'àáâãäåāăǎạảấầẩẫậắằẳẵặǻą',
		'C'		=> 'ÇĆĈĊČ',
		'c'		=> 'çćĉċč',
		'D'		=> 'ÐĎĐ',
		'd'		=> 'ďđ',
		'E'		=> 'ÈÉÊËĒĔĖĘĚẸẺẼẾỀỂỄỆ',
		'e'		=> 'èéêëēĕėęěẹẻẽếềểễệ',
		'G'		=> 'ĜĞĠĢ',
		'g'		=> 'ĝğġģ',
		'H'		=> 'ĤĦ',
		'h'		=> 'ĥħ',
		'I'		=> 'ÌÍÎÏĨĪĬĮİǏỈỊ',
		'J'		=> 'Ĵ',
		'j'		=> 'ĵ',
		'K'		=> 'Ķ',
		'k'		=> 'ķ',
		'L'		=> 'ĹĻĽĿŁ',
		'l'		=> 'ĺļľŀł',
		'N'		=> 'ÑŃŅŇ',
		'n'		=> 'ñńņňʼn',
		'O'		=> 'ÒÓÔÕÖØŌŎŐƠǑǾỌỎỐỒỔỖỘỚỜỞỠỢ',
		'o'		=> 'òóôõöøōŏőơǒǿọỏốồổỗộớờởỡợð',
		'R'		=> 'ŔŖŘ',
		'r'		=> 'ŕŗř',
		'S'		=> 'ŚŜŞŠ',
		's'		=> 'śŝşš',
		'T'		=> 'ŢŤŦ',
		't'		=> 'ţťŧ',
		'U'		=> 'ÙÚÛÜŨŪŬŮŰŲƯǓǕǗǙǛỤỦỨỪỬỮỰ',
		'u'		=> 'ùúûüũūŭůűųưǔǖǘǚǜụủứừửữự',
		'W'		=> 'ŴẀẂẄ',
		'w'		=> 'ŵẁẃẅ',
		'Y'		=> 'ÝŶŸỲỸỶỴ',
		'y'		=> 'ýÿŷỹỵỷỳ',
		'Z'		=> 'ŹŻŽ',
		'z'		=> 'źżž',
		// Ligatures
		'AE'		=> 'Æ',
		'ae'		=> 'æ',
		'OE'		=> 'Œ',
		'oe'		=> 'œ'
	);
 
	// Convertion
	foreach ($str_ascii as $k => $v) {
		$str = mb_ereg_replace('['.$v.']', $k, $str);
	}
 
	return $str;
}

J’ai essayé de regrouper tous les caractères spéciaux que je connaissais. Si il en manque, n’hésitez pas à me le signaler.

8 commentaires sur “PHP – Remplacer les caractères spéciaux et accents par leur correspondance ASCII”

  1. niko dit :

    Sympa, merci pour l’astuce

  2. frollon dit :

    Good work !!!!

    I like this !

  3. ByDorian dit :

    Merci, je me permet d’utiliser ta fonction en citant ton site dans le code.

  4. Sun Location dit :

    Super cette fonction, en tout cas bravo :)

    Cette fonction gère meme les caractères spéciaux étrangers comme le Š croate :)

  5. kike dit :

    Salut,

    Saurais-tu comment faire pour remplacer les caractères, genre ( ; ‘ , ), stp ?

  6. Mobi dit :

    Génial merci pour cette fonction bien utile !

  7. fred wolf dit :

    Bonjour,

    je suis sur winxp, mbstring est activé, mais mb_ereg_replace ne fonctionne pas sur les caractères accentués. Si je remplace par exemple

    ‘A’ => ‘ÀÁÂÃÄÅĀĂǍẠẢẤẦẨẪẬẮẰẲẴẶǺĄ’,

    Par

    ‘A’ => ‘bcde’,

    Alors tout mes ‘bcde’ sont remplacés par A.

    Je me demande si ça ne vient pas de « mb_regex_set_options ». Pourriez-vous, s’il vous plaît m’indiquer vos options dans le cas où le code proposé fonctionne chez vous ?

    Merci

    Fred

  8. en testant en local, mb_ereg_replace provoque une erreur . Je suppose qu’il y a un problème d’interprétation des caractères accentués .

Laisser une réponse

RSS du blog

© Copyright 2010 Pokemon_JOJO