Une Bévue
2012-02-16 14:19:45 UTC
je lis un fichier "setup.yaml" écrit par ruby, il est encodé en UTF-8 NO
BOM.
pour lire son contenu, depuis PHP, je fais :
$setup=yaml_parse_file('../setup.yaml');
$parameters_a=$setup['parameters_a'];
// $parameters_a est une array de hashes :
print_r($parameters_a);
echo "<br />";
foreach ($parameters_a as $key => $value) {
echo "$key => $value<br />";
foreach ($value as $cle => $valeur){
echo "$cle => $valeur<br />";
echo utf8_decode ($cle) . " => " . utf8_decode ($valeur) . "<br />";
}
echo "<br />";
}
echo "<br /><br />";
ce que j'obtiens, par exemple :
group => Médical // correspond à echo "$cle => $valeur<br />";
group => Médical // correspond à echo utf8_decode ($cle) . " => " .
utf8_decode ($valeur) . "<br />";
mon fichier php a le header :
header("Content-Type: text/html;charset=utf-8");
et mon butineur (Google Chrome 16 et Firefox 10) voient bien ce fichier
comme étant en UTF-8
la doc d'utf8_decode() dit qu'utf8_decode() décode la chaîne data, en
supposant qu'elle est au format UTF-8, et la convertit au format ISO-8859-1.
donc le flux parsé par yaml_parse_file('../setup.yaml')
est mal décodé ??? je ne comprends pas pourquoi utf8_decode me donne de
l'UTF-8, ce que j'espérais obtenir dès le départ...
sur la doc :
<http://www.php.net/manual/fr/function.yaml-emit-file.php>
il y a bien une option, à l'écriture correspondant à l'encodage.
mais sur la doc de yaml_parse_file :
<http://www.php.net/manual/fr/function.yaml-parse-file.php>
il n'y est pas fait mention d'une option spécifiant l'encodage...
je suis sous :
.-(~)--------------------------------------------------------(***@D620)-
`--> uname -a
Linux D620 3.0.0-16-generic #28-Ubuntu SMP Fri Jan 27 17:44:39 UTC 2012
x86_64 x86_64 x86_64 GNU/Linux
le php utilisé :
PHP Version 5.3.6-13ubuntu3.6
les infos concernant yaml :LibYAML Support enabled
Module Version 1.0.1
LibYAML Version 0.1.4
Directive Local Value Master Value
yaml.decode_binary 0 0
yaml.decode_timestamp 0 0
yaml.output_canonical 0 0
yaml.output_indent 2 2
yaml.output_width 80 80
dans le fichier setup.yml d'origine, M"dical est codé ainsi :
M\xC3\xA9dical
BOM.
pour lire son contenu, depuis PHP, je fais :
$setup=yaml_parse_file('../setup.yaml');
$parameters_a=$setup['parameters_a'];
// $parameters_a est une array de hashes :
print_r($parameters_a);
echo "<br />";
foreach ($parameters_a as $key => $value) {
echo "$key => $value<br />";
foreach ($value as $cle => $valeur){
echo "$cle => $valeur<br />";
echo utf8_decode ($cle) . " => " . utf8_decode ($valeur) . "<br />";
}
echo "<br />";
}
echo "<br /><br />";
ce que j'obtiens, par exemple :
group => Médical // correspond à echo "$cle => $valeur<br />";
group => Médical // correspond à echo utf8_decode ($cle) . " => " .
utf8_decode ($valeur) . "<br />";
mon fichier php a le header :
header("Content-Type: text/html;charset=utf-8");
et mon butineur (Google Chrome 16 et Firefox 10) voient bien ce fichier
comme étant en UTF-8
la doc d'utf8_decode() dit qu'utf8_decode() décode la chaîne data, en
supposant qu'elle est au format UTF-8, et la convertit au format ISO-8859-1.
donc le flux parsé par yaml_parse_file('../setup.yaml')
est mal décodé ??? je ne comprends pas pourquoi utf8_decode me donne de
l'UTF-8, ce que j'espérais obtenir dès le départ...
sur la doc :
<http://www.php.net/manual/fr/function.yaml-emit-file.php>
il y a bien une option, à l'écriture correspondant à l'encodage.
mais sur la doc de yaml_parse_file :
<http://www.php.net/manual/fr/function.yaml-parse-file.php>
il n'y est pas fait mention d'une option spécifiant l'encodage...
je suis sous :
.-(~)--------------------------------------------------------(***@D620)-
`--> uname -a
Linux D620 3.0.0-16-generic #28-Ubuntu SMP Fri Jan 27 17:44:39 UTC 2012
x86_64 x86_64 x86_64 GNU/Linux
le php utilisé :
PHP Version 5.3.6-13ubuntu3.6
les infos concernant yaml :LibYAML Support enabled
Module Version 1.0.1
LibYAML Version 0.1.4
Directive Local Value Master Value
yaml.decode_binary 0 0
yaml.decode_timestamp 0 0
yaml.output_canonical 0 0
yaml.output_indent 2 2
yaml.output_width 80 80
dans le fichier setup.yml d'origine, M"dical est codé ainsi :
M\xC3\xA9dical