PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 19-06-2014 07:08:39

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Collations / UTF8 ou que sais-je ?

Saluton,

Je me prends la tête depuis des heures avec un autre problème.

j'ai cet array associatif :

<?php
$glossaire=array('esgourde'=>'oreille',
                 'radiner (se)'=>'arriver',
                 'radiner (se) 2'=>'venir',
                 'moufter (ne pas)'=>'se taire',
                 'gueuler'=>'crier',
                 'fermer (la)'=>'se taire',
                 'ouvrir (ne pas l\')'=>'se taire',
                 'argougner'=>'saisir brutalement',
                 'endosses (les)'=>'épaules (les)',
                 'sourdingue'=>'sourd',
                 'chier (faire)'=>'importuner',
                 'burnes'=>'testicules',
                 'jeter (s\'en)'=>'boire',
                 'jeter (s\'en) 2'=>'avaler',
                 'entrée (d\')'=>'pour commencer',
                 'ratiches'=>'dent, voir aussi<b>chocotte, chicot, croc, crochet, domino',
                 'frelot'=>'frère, voir aussi frangin',
                 'roupane'=>'robe',
                 'tarin'=>'nez',
                 'cloporte (de<b>clot</b> la<b>porte</>'=>'concierge',
                 'comac'=>'comme ça',
                 'mastard'=>'énorme',
                 'zob ou zeb ou zobi ou zébi'=>'pénis',
                 'grand-dab'=>'grand-père',
                 'proprio'=>'propriétaire',
                 'tutu'=>'vin',
                 'au poil'=>'épatant',
                 'caoua (kawa)'=>'café',
                 'bignole (la)'=>'concierge (la)',
                 'que tchi'=>'rien ou pas grand chosee',
                 'tire'=>'voiture, on dit aussi bagnole ou chiotte',
                 'toubib'=>'médecin',
                 'badoure'=>'cher, dispendieux, on dit aussi chéro',
                 'chiotte'=>'voiture, on dit aussi tire ou bagnole',
                 'chiottes'=>'toilettes (WC)',
                 'belle-doche'=>'belle-mère on dit aussi belle-dab',
                 'bele-dab'=>'belle-mère, belle-doche est plus usité',
                 'grisolle'=>'bon marché',
                 'chéro'=>'cher, dispendieux, on dit aussi badoure',
                 'beaujol(pif)'=>'vin de Beaujolais',
                 'crocs (avoir les)'=>'dents, avoir faim',
                 'troquet'=>'bistrot (apocope de bistroquet)',
                 'frangine (1)'=>'sœur (du frère)',
                 'frangine (une) (2)'=>'une fille ',
                 'peau de balle'=>'rien 1',
                 'que lape'=>'rien 2',
                 'que nib'=>'rien',
                 'pas lerche'=>'peu',
                 'clébard'=>'chien',
                 'bagnole'=>'voiture, on dit aussi tire ou chiotte'
                 );

l'objectif est de le classer par ordre alphabétique croissant sur les index d'abord puis sur les valeurs (en gardant l'association clé=>valeur.
J'y parviens très bien avec ce jeux de fonctions :

function cmp($a, $b){
    $a=ascii127($a);
    $b=ascii127($b);
    if ($a == $b) {
        return 0;
        }
    return ($a < $b) ? -1 : 1;
    }
function ascii127($string){
    $diacritiques=array("à","â","ä","é","è","ê","ë","î","ï","ô","ù","û","ü","æ","œ");
    $simples     =array("a","a","a","e","e","e","e","i","i","o","u","u","u","ae","oe");
    return str_replace($diacritiques,$simples,strtolower($string));
    }

appelées dans ce script :

        <section>
            <div id="argot">
                <h3>Argot >>>> Français</h3>
<?php
include 'glossaire.txt';
uksort($glossaire,"cmp");//classe le tableau par ordre alpha sur la key argot
$alpha='';
$glossinverse='';
foreach($glossaire AS $argot=>$français){ //rechercher l'alphabet du glossaire d'argot
    $alpha[strtoupper(ascii127(substr($argot,0,1)))]=substr($argot,0,1);
    $glossinverse[$français]=$argot;// on en profite pour créer le glossaire inverse
    }
?>
                <table style="width:99%">
                    <tr class="alpha"><th colspan="2">
<?php
$th='';
foreach($alpha AS $lettre=>$null){
    $th.="<input type=\"button\" value=\"".$lettre."\" onClick=\"document.location.href='#$null';\"/>&nbsp;";
    }
    $th.="\n";
    echo $th;
?>
                    </tr>
<?php
$lettre='';
$class="alpha";
foreach($glossaire AS $argot=>$français){
        $class=($class=='') ? ' class="alpha" ': '';
        if(ascii127(substr($argot,0,1))!=$lettre){
            $lettre=ascii127(substr($argot,0,1));
            printf("<tr %s name=\"%s\"><td>%s</td><td><em>%s</em></td></tr>\n",$class, $lettre, $argot,$français);
            }
        else{
            printf("<tr %s><td>%s</td><td><em>%s</em></td></tr>\n",$class,$argot,$français);
            }
        }
?>                                    
                </table>
            </div>
            <div id="francais">
                <h3>Français >>>> Argot</h3>
<?php
$alpha='';
uksort($glossinverse,"cmp");
foreach($glossinverse AS $français=>$argot){//rechercher l'alphabet du glossaire inverse
    $alpha[strtoupper(ascii127(substr($français,0,1)))]=substr($français,0,1);
    }
?>
                <table style="width:99%">
                    <tr class="alpha"><th colspan="2">
<?php
$th='';
$class="alpha";
foreach($alpha AS $lettre=>$null){
    $th.="<input type=\"button\" value=\"".strtoupper(ascii127($lettre))."\" onClick=\"document.location.href='#$null';\"/>&nbsp;";
    }
    $th.="\n";
    echo $th;
?>
                    </tr>
<?php                  
$lettre='';
foreach($glossinverse AS $français=>$argot){
        $class=($class=='') ? ' class="alpha" ': '';
        if(ascii127(substr($français,0,1))!=$lettre){
            $lettre=ascii127(substr($français,0,1));
            printf("<tr %s name=\"%s\"><td>%s</td><td><em>%s</em></td></tr>\n",$class,$lettre,$français, $argot);
            }
        else{
            printf("<tr %s><td>%s</td><td><em>%s</em></td></tr>\n",$class,$français,$argot);
            }
        }
?>                  
                </table>
            </div>
        </section>
<?php

Mon souci est que le 'é' de 'épaules dans l'item

'endosses (les)'=>'épaules (les)',

ne se transforme pas en E.

Et pourtant j'ai testé

echo strtotupper(asci127("épaule"));

qui affiche bien 'EPAULE'.

Vous pouvez voir ce script ici : http://www.avcxjo-moko-kantas.fr/LMAM/i … p?page=GLO



Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#2 29-06-2014 21:28:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Collations / UTF8 ou que sais-je ?

Bon finalement j'ai trouvé, ailleurs sur le web, une solution pas très élégante, mais qui semble fonctionner :

function ascii127($string){
$modif = str_replace(
      array(
        utf8_decode('à'), utf8_decode('â'), utf8_decode('ä'), utf8_decode('á'), utf8_decode('ã'), utf8_decode('å'),
        utf8_decode('î'), utf8_decode('ï'), utf8_decode('ì'), utf8_decode('í'),
        utf8_decode('ô'), utf8_decode('ö'), utf8_decode('ò'), utf8_decode('ó'), utf8_decode('õ'), utf8_decode('ø'),
        utf8_decode('ù'), utf8_decode('û'), utf8_decode('ü'), utf8_decode('ú'),
        utf8_decode('é'), utf8_decode('è'), utf8_decode('ê'), utf8_decode('ë'),
        utf8_decode('ç'), utf8_decode('ÿ'), utf8_decode('ñ'),
        utf8_decode('À'), utf8_decode('Â'), utf8_decode('Ä'), utf8_decode('Á'), utf8_decode('Ã'), utf8_decode('Å'),
        utf8_decode('Î'), utf8_decode('Ï'), utf8_decode('Ì'), utf8_decode('Í'),
        utf8_decode('Ô'), utf8_decode('Ö'), utf8_decode('Ò'), utf8_decode('Ó'), utf8_decode('Õ'), utf8_decode('Ø'),
        utf8_decode('Ù'), utf8_decode('Û'), utf8_decode('Ü'), utf8_decode('Ú'),
        utf8_decode('É'), utf8_decode('È'), utf8_decode('Ê'), utf8_decode('Ë'),
        utf8_decode('Ç'), utf8_decode('Ÿ'), utf8_decode('Ñ'), utf8_decode('æ'), utf8_decode('Æ'), utf8_decode('œ'), utf8_decode('Œ')
      ),
      array(
        'a', 'a', 'a', 'a', 'a', 'a',
        'i', 'i', 'i', 'i',
        'o', 'o', 'o', 'o', 'o', 'o',
        'u', 'u', 'u', 'u',
        'e', 'e', 'e', 'e',
        'c', 'y', 'n',
        'A', 'A', 'A', 'A', 'A', 'A',
        'I', 'I', 'I', 'I',
        'O', 'O', 'O', 'O', 'O', 'O',
        'U', 'U', 'U', 'U',
        'E', 'E', 'E', 'E',
        'C', 'Y', 'N', 'A', 'A', 'oe', 'OE'
      ),$string);
    return strtolower(utf8_encode($modif));
    }

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 29-06-2014 21:31:42

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Collations / UTF8 ou que sais-je ?

Euh non, en fait, ça ne fonctionne pas vraiment, mais on s'approche.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 03-07-2014 14:16:02

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Collations / UTF8 ou que sais-je ?

Bon, ne me demandez pas (enfin pas trop) comment j'ai fait, mais là, ça a vraiment l'air de fonctionner.
Pour des raisons que je ne m'explique pas, le résultat d'un

var_dump(iconv_get_encoding('all'));
?>

sur mon site retourne

VDMedia-hebergement a écrit :

Array
(
    [input_encoding] => ISO-8859-1
    [output_encoding] => ISO-8859-1
    [internal_encoding] => ISO-8859-1
)

Donc, bien que tout ce que j'y transfère via Filezilla soit, au départ en UTF8 sous Ubuntu gedit, j'ai dû considérer que tout se retrouvait en ISO-8859-1 sur le serveur. (Bizarre, bizarre.)

Bref voici les deux sources
les data:

<?php
$glossaire=array('esgourde'=>'oreille',
                 'radiner (se)'=>'arriver',
                 'radiner (se) 2'=>'venir',
                 'moufter (ne pas)'=>'dire (ne rien)',
                 'gueuler'=>'crier',
                 'fermer (la)'=>'se taire 2',
                 'ouvrir (ne pas l\')'=>'se taire 1',
                 'argougner'=>'saisir brutalement',
                 'endosses (les)'=>'épaules (les)',
                 'sourdingue'=>'sourd',
                 'chier (faire)'=>'importuner',
                 'burnes'=>'testicules',
                 'jeter (s\'en)'=>'boire',
                 'jeter (s\'en) 2'=>'avaler',
                 'entrée (d\')'=>'pour commencer',
                 'ratiches'=>'dent, voir aussi<b>chocotte, chicot, croc, crochet, domino',
                 'frelot'=>'frère, voir aussi frangin',
                 'roupane'=>'robe',
                 'tarin'=>'nez',
                 'cloporte (de<b>clot</b> la<b>porte</>)'=>'concierge',
                 'comac'=>'comme ça',
                 'mastard'=>'énorme',
                 'zob ou zeb ou zobi ou zébi'=>'pénis',
                 'grand-dab'=>'grand-père',
                 'proprio'=>'propriétaire',
                 'tutu'=>'vin',
                 'au poil'=>'épatant',
                 'caoua (kawa)'=>'café',
                 'bignole (la)'=>'concierge (la)',
                 'que tchi'=>'rien ou pas grand chosee',
                 'tire'=>'voiture, on dit aussi bagnole ou chiotte',
                 'toubib'=>'médecin',
                 'badour(e)'=>'beau (belle), bien.',
                 'chiotte'=>'voiture, on dit aussi tire ou bagnole',
                 'chiottes'=>'toilettes (WC)',
                 'belle-doche'=>'belle-mère on dit aussi belle-dab',
                 'bele-dab'=>'belle-mère, belle-doche est plus usité',
                 'grisolle'=>'bon marché',
                 'chéro'=>'cher, dispendieux, on dit aussi badoure',
                 'beaujol(pif)'=>'vin de Beaujolais',
                 'crocs (avoir les)'=>'dents, avoir faim',
                 'troquet'=>'bistrot (apocope de bistroquet)',
                 'frangin(e) (1)'=>'frère, sœur',
                 'frangine (une) (2)'=>'une fille ',
                 'peau de balle'=>'rien 1',
                 'que lape'=>'rien 2',
                 'que nib'=>'rien',
                 'pas lerche'=>'peu',
                 'clébard'=>'chien',
                 'bagnole'=>'voiture, on dit aussi tire ou chiotte',
                 'bergère'=>'conjointe, épouse',
                 'plume, plumard'=>'lit',
                 'ronfler, ronquer'=>'dormir 1',
                 'pioncer'=>'dormir 2',
                 'écraser (en)'=>'dormir 3',
                 'crève (avoir la)'=>'malade (être)',
                 'fouill(ous)e'=>'poche',
                 'plume'=>'pied de biche'
                 );

et le script

        <h2>Glossaire</h2>
        <section>
            <div id="argot">
                <h3>Argot >>>> Français</h3>
<?php
include 'glossaire.txt';
uksort($glossaire,"cmp");//classe le tableau par ordre alpha sur la key argot
$alpha='';
$glossinverse='';
foreach($glossaire AS $argot=>$français){ //rechercher l'alphabet du glossaire d'argot
    $alpha[strtoupper(substr(ascii127($argot),0,1))]=substr($argot,0,1);
    $glossinverse[$français]=$argot;// on en profite pour créer le glossaire inverse
    }
?>
                <table style="width:99%">
                    <tr class="alpha"><th colspan="2">
<?php
$th='';
foreach($alpha AS $lettre=>$null){
    $th.="<input type=\"button\" value=\"".$lettre."\" onClick=\"document.location.href='#$null';\"/>&nbsp;";
    }
    $th.="\n";
    echo $th;
?>
                    </tr>
<?php
$lettre='';
$class="alpha";
foreach($glossaire AS $argot=>$français){
        $class=($class=='') ? ' class="alpha" ': '';
        if(substr(ascii127($argot),0,1)!=$lettre){
            $lettre=substr(ascii127($argot),0,1);
            printf("<tr %s name=\"%s\"><td>%s</td><td><em>%s</em></td></tr>\n",$class, $lettre, $argot,$français);
            }
        else{
            printf("<tr %s><td>%s</td><td><em>%s</em></td></tr>\n",$class,$argot,$français);
            }
        }
?>                                    
                </table>
            </div>
            <div id="francais">
                <h3>Français >>>> Argot</h3>
<?php
$alpha='';
uksort($glossinverse,"cmp");
foreach($glossinverse AS $français=>$argot){//rechercher l'alphabet du glossaire inverse
    $alpha[strtoupper(substr(ascii127($français),0,1))]=substr($français,0,1);
    }
?>
                <table style="width:99%">
                    <tr class="alpha"><th colspan="2">
<?php
$th='';
$class="alpha";
foreach($alpha AS $lettre=>$null){
    $th.="<input type=\"button\" value=\"".strtoupper(ascii127($lettre))."\" onClick=\"document.location.href='#$null';\"/>&nbsp;";
    }
    $th.="\n";
    echo $th;
?>
                    </tr>
<?php                  
$lettre='';
foreach($glossinverse AS $français=>$argot){
        $class=($class=='') ? ' class="alpha" ': '';
        if(substr(ascii127($français),0,1)!=$lettre){
            $lettre=substr(ascii127($français),0,1);
            printf("<tr %s name=\"%s\"><td>%s</td><td><em>%s</em></td></tr>\n",$class,$lettre,$français, $argot);
            }
        else{
            printf("<tr %s><td>%s</td><td><em>%s</em></td></tr>\n",$class,$français,$argot);
            }
        }
?>                  
                </table>
            </div>
        </section>
<?php
function cmp($a, $b){
    $a=ascii127($a);
    $b=ascii127($b);
    if ($a == $b) {
        return 0;
        }
    return ($a < $b) ? -1 : 1;
    }
function ascii127($string){
$modif = str_replace(
      array(
        utf8_encode('à'), utf8_encode('â'), utf8_encode('ä'), utf8_encode('á'), utf8_encode('ã'), utf8_encode('å'),
        utf8_encode('î'), utf8_encode('ï'), utf8_encode('ì'), utf8_encode('í'),
        utf8_encode('ô'), utf8_encode('ö'), utf8_encode('ò'), utf8_encode('ó'), utf8_encode('õ'), utf8_encode('ø'),
        utf8_encode('ù'), utf8_encode('û'), utf8_encode('ü'), utf8_encode('ú'),
        utf8_encode('é'), utf8_encode('è'), utf8_encode('ê'), utf8_encode('ë'),
        utf8_encode('ç'), utf8_encode('ÿ'), utf8_encode('ñ'),
        utf8_encode('À'), utf8_encode('Â'), utf8_encode('Ä'), utf8_encode('Á'), utf8_encode('Ã'), utf8_encode('Å'),
        utf8_encode('Î'), utf8_encode('Ï'), utf8_encode('Ì'), utf8_encode('Í'),
        utf8_encode('Ô'), utf8_encode('Ö'), utf8_encode('Ò'), utf8_encode('Ó'), utf8_encode('Õ'), utf8_encode('Ø'),
        utf8_encode('Ù'), utf8_encode('Û'), utf8_encode('Ü'), utf8_encode('Ú'),
        utf8_encode('É'), utf8_encode('È'), utf8_encode('Ê'), utf8_encode('Ë'),
        utf8_encode('Ç'), utf8_encode('Ÿ'), utf8_encode('Ñ'), utf8_encode('æ'), utf8_encode('Æ'), utf8_encode('œ'), utf8_encode('Œ')
      ),
      array(
        'a', 'a', 'a', 'a', 'a', 'a',
        'i', 'i', 'i', 'i',
        'o', 'o', 'o', 'o', 'o', 'o',
        'u', 'u', 'u', 'u',
        'e', 'e', 'e', 'e',
        'c', 'y', 'n',
        'A', 'A', 'A', 'A', 'A', 'A',
        'I', 'I', 'I', 'I',
        'O', 'O', 'O', 'O', 'O', 'O',
        'U', 'U', 'U', 'U',
        'E', 'E', 'E', 'E',
        'C', 'Y', 'N', 'A', 'A', 'oe', 'OE'
      ),utf8_encode($string));

    return strtolower(utf8_encode($modif));
    }
   
?>

Bon maintenant il me reste à comprendre pourquoi les ancres internes ne fonctionnent pas, mais c'est une autre aventure ...


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 03-07-2014 20:28:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Collations / UTF8 ou que sais-je ?

Bon le problème de la navigation dans le glossaire réversible est réglé.

J'avais oublié que les ancres internes ne pointent plus sur l'attribut name mais sur l'attribut id. Lequel, bien sûr, doit être unique pour toute la page HTML.
Vous pouvez voir le résultat ici : www.avcxjo-moko-kantas.fr/LMAM/index.php?page=GLO


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums