1

J'utilise une fonction que je trouve sur Stackoverflow pour remplacer certains caractères spéciaux:Remplacer question de la fonction Caractères spéciaux

function toASCII($str) 
{ 
    return strtr(utf8_decode($str), 
     utf8_decode(
     'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'), 
     'SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYOUsaaaaaaaceeeeiiiionoooooouuuuyyou'); 
} 

Cependant, lorsque je tente la fonctionnalité HTML je ne suis pas le résultat souhaité. Code HTML:

<?php 
$test = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'; 

$test1 = toASCII($test); 
?> 

!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> 

    <head> 

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 
    <body> 
     <?php echo $test."<br>"; 
       echo $test1; 
     ?> 

    </body> 
</html> 

Résultat dans le navigateur:

ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű 
uuuuuuuYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYuusaaaaaaaceeeeiiiionoooooouuuuyyuu 

Toutes les idées pourquoi certains personnages sont présentés comme u au lieu de celui de votre choix?

Note: Je préférerais éviter d'utiliser setlocale car elle nécessitait des modifications supplémentaires dans le code.

Répondre

0

Lorsque vous utilisez strtr() avec trois arguments, il fonctionne avec des octets et non avec des caractères multi-octets (voir http://php.net/manual/en/function.strtr.php#111270). Au lieu de cela, vous devez donner un tableau qui contient un mappage exact.

Ce serait une solution pour votre cas:

<?php 

function mbStringToArray($str) { 
    return preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY); 
} 

function toASCII($str) { 
    $map = array_combine(
     mbStringToArray('ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'), 
     mbStringToArray('SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYOUsaaaaaaaceeeeiiiionoooooouuuuyyou') 
    ); 
    return strtr($str,$map); 
} 

$test = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű'; 
$test1 = toASCII($test); 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    </head> 
    <body> 
    <?php 
     echo $test."<br>"; 
     echo $test1; 
    ?> 
    </body> 
</html> 

Sortie:

ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŐŰßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿőű 
SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYOUsaaaaaaaceeeeiiiionoooooouuuuyyou