Changement d'encodage

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 : Changement d'encodage

par Louisss » 12 févr. 2008, 16:39

Merci h0_noMan !

Ta proposition ne résout pas le problème, mais sur la page de la documentation en ligne parlant de htmlentities(), j'ai trouvé un post proposant une petite fonction de conversion du format Mac OS Roman en ISO 8859-1. Après quoi, il suffit de convertir le résultat en utf-8 par utf8_encode() et le tour est joué.

Voici le code :

Code : Tout sélectionner

function macRomanToIso($string) { return strtr($string, "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa1\xa4\xa6\xa7\xa8\xab\xac\xae\xaf\xb4\xbb\xbc\xbe\xbf\xc0\xc1\xc2\xc7\xc8\xca\xcb\xcc\xd6\xd8\xdb\xe1\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf1\xf2\xf3\xf4\xf8\xfc\xd2\xd3\xd4\xd5", "\xc4\xc5\xc7\xc9\xd1\xd6\xdc\xe1\xe0\xe2\xe4\xe3\xe5\xe7\xe9\xe8\xea\xeb\xed\xec\xee\xef\xf1\xf3\xf2\xf4\xf6\xf5\xfa\xf9\xfb\xfc\xb0\xa7\xb6\xdf\xae\xb4\xa8\xc6\xd8\xa5\xaa\xba\xe6\xf8\xbf\xa1\xac\xab\xbb\xa0\xc0\xc3\xf7\xff\xa4\xb7\xc2\xca\xc1\xcb\xc8\xcd\xce\xcf\xcc\xd3\xd4\xd2\xda\xdb\xd9\xaf\xb8\x22\x22\x27\x27"); } if (file_exists("Test.txt")) $Tab = file("Test.txt", FILE_USE_INCLUDE_PATH + FILE_IGNORE_NEW_LINES); else { echo "Fichier introuvable."; exit(); } foreach($Tab as $Ligne) echo utf8_encode(macRomanToIso($Ligne))."X<br />";

par h0_noMan » 12 févr. 2008, 16:11

Essaie htmlentities() qui convertira des caractères accentués en entité HTML.
htmlentities($Ligne, ENT_NOQUOTES, 'UTF-8');

par Louisss » 12 févr. 2008, 15:51

Non, utf8_decode() ne change rien. Ca m'aurait beaucoup étonné d'ailleurs.

par Invité » 12 févr. 2008, 14:49

peut etre avec son inverse

utf8_decode();
http://fr3.php.net/utf8_decode

Changement d'encodage

par Louisss » 12 févr. 2008, 14:44

Bonjour.
Je rencontre un problème avec l'encodage dans un script de lecture de fichier : mon script se trouve dans un fichier PHP encodé en utf8 avec (normalement) tout ce qu'il faut pour que l'utf8 soit imposé. Mon navigateur ouvre aussi par défaut les pages Web en utf8.
Le fichier que je tente de lire, lui, est encodé en "plain text" version Mac. L'encodage porte visiblement le nom de "Mac OS Roman".

Voici le script :
<?php
header('Content-type: text/html; charset=utf8');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title></title>
	</head>
	<body>
<?php
if (file_exists("Test.txt"))
	$Tab = file("Test.txt", FILE_IGNORE_NEW_LINES);
else
{
	echo "Fichier introuvable.";
	exit();
}

foreach($Tab as $Ligne)
	echo $Ligne."X<br />";
A l'affichage de chaque ligne, les lettres accentuées sont remplacées par un point d'interrogation dans un losange : �
J'ai essayé de forcer l'encodage de chaque ligne en utf8 avec la fonction utf8_encode() :
<?php
header('Content-type: text/html; charset=utf8');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 TRANSITIONAL//EN">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title></title>
	</head>
	<body>
<?php
if (file_exists("Test.txt"))
	$Tab = file("Test.txt", FILE_USE_INCLUDE_PATH + FILE_IGNORE_NEW_LINES);
else
{
	echo "Fichier introuvable.";
	exit();
}

foreach($Tab as $Ligne)
	echo utf8_encode($Ligne)."X<br />";
Cette fois-ci, les caractères accentués n'apparaissent plus du tout.

Précision : le problème est le même si je lis le fichier avec fgets() plutôt qu'avec file().

Merci d'avance pour vos réponses.