IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

str_replace et Unicode/UTF-8 [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Par défaut str_replace et Unicode/UTF-8
    Bonjour, j'ai peur de ne pas être au bon endroit, mais je ne sais où me poser, désolé…


    J'ai de petits soucis pour afficher une transcription qui utilise des diacritiques assez particulères : outres les accents grave et aigües, j'ai également besoin de macron ("_" sur et sous les lettres) et de carons (accents circonflexes inversés), y compris sur les consonnes "m" et "n" !

    je me suis fait deux petites fonction pour chaque romanisation, mais ça devient très vite la catastrophe : parfois ça marche, parfois pas du tout !

    Voici le code (il va sans dire qu'aillant du chinois sur le site, c'est codé en UTF-8) de la fonction. Pour expliquer, je voudrais juste ajouter le ton après la lettre concernée par un chiffre, qui est ensuite remplacé par la diacritique qui se positionne automatiquement sur la lettre. J'affiche avec la police Arial Unicode MS.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    function texttodt($chaine)
    	{
    	$chaine_avant	= array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0');
    	$chaine_apres	= array('', '̀', '̱', '̄', '̌', '́', '̄', '',  '̱', '°');
     
    	return str_replace($chaine_avant, $chaine_apres, $chaine);
    	}
     
    $text	= 'a1 a2 a3 a4 a5 a6 a7 a8 a9 a0 <br />
    			e1 e2 e3 e4 e5 e6 e7 e8 e9 e0 <br />
    			i1 i2 i3 i4 i5 i6 i7 i8 i9 i0 <br />
    			u1 u2 u3 u4 u5 u6 u7 u8 u9 u0 <br />
    			o1 o2 o3 o4 o5 o6 o7 o8 o9 o0 <br />
    			m1 m2 m3 m4 m5 m6 m7 m8 m9 m0 <br />
    			n1 n2 n3 n4 n5 n6 n7 n8 n9 n0'; 
     
    $text	= texttodt($text);
     
    echo $text;
    ?>
    qui m'affiche ceci :

    a a&#̄;2; ā; a&#̄̄2; a&#̄°; a! ā a a̱ a°
    e e&#̄;2; ē; e&#̄̄2; e&#̄°; e! ē e e̱ e°
    i i&#̄;2; ī; i&#̄̄2; i&#̄°; i! ī i i̱ i°
    u u&#̄;2; ū; u&#̄̄2; u&#̄°; u! ū u u̱ u°
    o o&#̄;2; ō; o&#̄̄2; o&#̄°; o! ō o o̱ o°
    m m&#̄;2; m̄; m&#̄̄2; m&#̄°; m! m̄ m m̱ m°
    n n&#̄;2; n̄; n&#̄̄2; n&#̄°; n! n̄ n ṉ n°

    Je pourrait certe me contenter de remplacer les voyelles par les caractères adéquates qui existent déjà en Unicode, mais ça ne résoudra pas mon problème…



    Une piste ??

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    utf8_encode() / utf8_decode() ne pourraient pas convenir ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Par défaut
    C'est ce que je me dis, c'est une histoire d'encodage / décodage, mais je suis encore débutant (j'ai commence à apprendre tout en Juin), et ces histoires de format, bits, encodage, etc., restent une belle zone d'ombre…


    Où devrais-je décoder / encoder ?? J'enregistre mes pages, je maintiens ma BDD et affiche en UTF-8…


    D'ailleurs, questions subsidiaire : pourquoi Notepad++ m'ouvre toujours uen nouvelle page en ASCII alors que j'ai demandé de nouvelles pages en UTF-8 w/o BOM dans les configurations ?? C'est embêtant de toujours devoir convertir en UTF-8, surtotu quand on oublie de le faire :s

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2008
    Messages : 333
    Par défaut
    Je suis finalement arriver à ce que je voulait, bien qu'aillant emprunter un détour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $text	=  'a  a2  a3  a4  a5  a6  a7  a  a9  a0 <br />
    			e  e2  e3  e4  e5  e6  e7  e  e9  e0 <br />
    			i  i2  i3  i4  i5  i6  i7  i  i9  i0 <br />
    			u  u2  u3  u4  u5  u6  u7  u  u9  u0 <br />
    			o  o2  o3  o4  o5  o6  o7  o  o9  o0 <br />
    			m  m2  m3  m4  m5  m6  m7  m  m9  m0 <br />
    			n  n2  n3  n4  n5  n6  n7  n  n9  n0'; 
     
    	$chaine_avant	= array('3', '4');
    	$chaine_apres	= array('9', '7');
    	$text			= str_replace($chaine_avant, $chaine_apres, $text);
     
    	$chaine_avant	= array('2', 	 '5', 	  '6', 	   '7', 	'9',	 '0');
    	$chaine_apres	= array('{', '5', '6', '7', '9', ':');
    	$text			= str_replace($chaine_avant, $chaine_apres, $text);
    	$text_test		= $text;
     
    	$chaine_avant	= array('{', '3', '4', '5', '6', '7', '9', ':');
    	$chaine_apres	= array('̀', '̱', '̄', '̌', '́', '̄', '̱', '°');	
    	$text	= str_replace($chaine_avant, $chaine_apres, $text);;
    Pour obtenir :

    a à a̱ ā ǎ á ā a a̱ a°
    e è e̱ ē ě é ē e e̱ e°
    i ì i̱ ī ǐ í ī i i̱ i°
    u ù u̱ ū ǔ ú ū u u̱ u°
    o ò o̱ ō ǒ ó ō o o̱ o°
    m m̀ m̱ m̄ m̌ ḿ m̄ m m̱ m°
    n ǹ ṉ n̄ ň ń n̄ n ṉ n°

    A part le i, le résultat est très correct… Néanmoins ça fait un peu MacGyver, j'aurais préféré une vraie fonction plutôt que du bricolage, donc je suis toujours intéressé par des solutions possibles

    J'ai cru comprendre que c'est le fait qu'UTF-8 utilise des bits de tailles variables qui m'a posé problème, non ??

  5. #5
    Membre éprouvé
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Par défaut
    vire tes str_replace, et remplace les par htmlentities :

    http://fr.php.net/htmlentities

    Il fera la conversion tout seul

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire (et convertir) un fichier en unicode/utf-16
    Par sopsag dans le forum Général Python
    Réponses: 2
    Dernier message: 10/06/2009, 12h58
  2. Conversion unicode (utf-8)
    Par spender dans le forum Visual C++
    Réponses: 17
    Dernier message: 10/02/2009, 09h32
  3. MSSQL 2005 : Unicode & UTF-8
    Par kaboume dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/11/2007, 10h07
  4. Sharpdevelop et unicode / utf-8
    Par Thorna dans le forum Sharpdevelop
    Réponses: 1
    Dernier message: 25/05/2007, 21h02
  5. [unicode] mauvais rendu du code utf.
    Par PyBio dans le forum Général Python
    Réponses: 4
    Dernier message: 04/11/2005, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo