Caractères français

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Caractères français

Re: Caractères français

par moogli » 10 mars 2017, 10:53

salut,

vue qu'a priori ta chaîne de caractère est en utf-8 il me semble normale que tu ai une erreur lorsque tu demandes a convertir une chaîne UTF-8 de ASCII à UTF-8.
ensuite ces caractères n'existe pas dans la table ASCII (dans la table étendu oui et je ne sais pas laquelle est prise en compte).
la table ASCII indiquée par la doc http://www.asciitable.com/

as tu vu ce commentaire de la doc (et celui du dessous) ? http://php.net/manual/fr/function.iconv.php#74101
par exemple echo iconv( 'UTF-8','ASCII//TRANSLIT', $spec) . PHP_EOL; ne produit pas d'erreur et retourne ce qu'il pense être le mieux (donc a priori pas d'ASCII étendu).

pour substr : cette fonction ne gère pas les caractères utf-8 oriente toi vers mb_substr

pour ord et chr je suppose que c'est la même chose tu demandes un code d'un caractère qui n'existe pas. c'est dans ce sens que va le premier commentaire de la doc de la fonction ord (http://php.net/manual/fr/function.ord.php#109812).

si tu as besoin du code hexa il y a des solutions proposées dans la doc.

La solution est d'utiliser les fonctions mb_*.

@+

Caractères français

par Choucas » 09 mars 2017, 14:38

Bonjour,
Problématique : automatisation de l'injection de documents .doc et .odt dans MySql pour publication avec spip.
Problème : gestion des caractères spécifiques à la langue française.
Lors du développement du module php, en écriture de contrôle à l'écran ou dans une page html, des caractères spécifiques à la langue française (rassemblés dans $spec) apparaissent, parfois, de façon non identifiable.
L'écriture de $spec est correcte mais l'écriture caractère par caractère donne n'importe quoi, le transfert via ord() et retour par chr() encore n'importe quoi.
Avant d'injecter plus de 500 documents, je souhaite minimiser la mise en forme finale.

Par quel bout prendre la chose ?

Merci de votre aide.
------------------------------------------------------------------------------------

Code : Tout sélectionner

echo "\n\n\n\n\n\n"; echo "encodage par défaut : " . mb_internal_encoding() . "\n"; echo "-----------------\n"; $spec = "àæçéèêëîïôœùûüÿ"; echo "encodage de ". $spec ." : " . mb_detect_encoding ($spec) . "\n"; $franc = str_split ($spec) ; echo "-----------iconv UTF-8------------\n"; echo iconv('ASCII', 'UTF-8', $spec) . "\n"; echo "------------Brut-----------\n"; echo $spec . "\n" ; echo "-------------Lettre par lettre----------\n"; foreach ($franc as $val) { echo $val . "=>" . ord($val) . "/" . chr(ord($val)).", "; } echo "\n" ; for($i = 1; $i < strlen($spec); $i++) { echo " " . substr($spec, $i, 1) . ", "; } echo "\n\n\n\n\n\n";

Résultat

Code : Tout sélectionner

encodage par défaut : UTF-8 ----------------- encodage de àæçéèêëîïôœùûüÿ : UTF-8 -----------iconv UTF-8------------ PHP Notice: iconv(): Detected an illegal character in input string in /home/jean-max/ChantierSites/Amap/Injection/test.php on line 9 ------------Brut----------- àæçéèêëîïôœùûüÿ -------------Lettre par lettre---------- �=>195/�, �=>160/�, �=>195/�, �=>166/�, �=>195/�, �=>167/�, �=>195/�, �=>169/�, �=>195/�, �=>168/�, �=>195/�, �=>170/�, �=>195/�, �=>171/�, �=>195/�, �=>174/�, �=>195/�, �=>175/�, �=>195/�, �=>180/�, �=>197/�, �=>147/�, �=>195/�, �=>185/�, �=>195/�, �=>187/�, �=>195/�, �=>188/�, �=>195/�, �=>191/�, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �, �,
Configuration : PHP Version => 7.0.15-0ubuntu0.16.04.4