Je cherche à detecter le type d'encodage d'un fichier html
($monFichier).
$ma_chaine = file_get_contents($monFichier);
1ère solution : récupérer le charset dans la balise <meta> du
fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1
même s'il a été enregistré en Unicode(UTF-16).
2ème solution : utiliser un algorithme plus ou moins complexe qui
permet de détecter l'encodage avec lequel a été créer le fichier.
Le w3 propose une fonction qui détecte le format utf-8 :
<?php
// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {
J'en voudrais une qui détecte le format UTF-16!Existe-elle?
Si j'ai bien compris, le format UTF-16 consiste tout simplement à mettre les deux octets de chaque caractère Unicode (ceux inférieurs à 65536) en séquence, avec une convention particulière pour les plus grands.
Par conséquent, à moins qu'il ne commence par un « Byte Order Mark » (BOM), sans précision sur la langue utilisée il est difficile voire impossible de le dire. Cela dit, si le texte est un un fichier HTML, c'est plus facile car tout le début est de l'ASCII 7bits.
À priori, un fichier UTF-16, selon qu'il a un BOM ou non, et selon qu'il est Big Endian ou Little Endian, commence comme ceci (## représente un caractère undéterminé, compris entre 20 et 7E) :
UTF-16 BE avec BOM : FE FF 00 ## 00 ## 00 ## ... UTF-16 BE sans BOM : 00 ## 00 ## 00 ## 00 ## ...
UTF-16 LE avec BOM : FF FE ## 00 ## 00 ## 00 ... UTF-16 LE sans BOM : ## 00 ## 00 ## 00 ## 00 ...
Voir aussi ceci pour des fichiers XML : <http://www.w3.org/TR/2004/REC-xml-20040204/#sec-guessing>.
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
// Returns true if $string is valid UTF-8 and false otherwise.
function is_utf8($string) {
J'en voudrais une qui détecte le format UTF-16!Existe-elle?
Si j'ai bien compris, le format UTF-16 consiste tout simplement à mettre
les deux octets de chaque caractère Unicode (ceux inférieurs à 65536) en
séquence, avec une convention particulière pour les plus grands.
Par conséquent, à moins qu'il ne commence par un « Byte Order Mark »
(BOM), sans précision sur la langue utilisée il est difficile voire
impossible de le dire. Cela dit, si le texte est un un fichier HTML,
c'est plus facile car tout le début est de l'ASCII 7bits.
À priori, un fichier UTF-16, selon qu'il a un BOM ou non, et selon qu'il
est Big Endian ou Little Endian, commence comme ceci (## représente un
caractère undéterminé, compris entre 20 et 7E) :
UTF-16 BE avec BOM : FE FF 00 ## 00 ## 00 ## ...
UTF-16 BE sans BOM : 00 ## 00 ## 00 ## 00 ## ...
UTF-16 LE avec BOM : FF FE ## 00 ## 00 ## 00 ...
UTF-16 LE sans BOM : ## 00 ## 00 ## 00 ## 00 ...
Voir aussi ceci pour des fichiers XML :
<http://www.w3.org/TR/2004/REC-xml-20040204/#sec-guessing>.
--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.
J'en voudrais une qui détecte le format UTF-16!Existe-elle?
Si j'ai bien compris, le format UTF-16 consiste tout simplement à mettre les deux octets de chaque caractère Unicode (ceux inférieurs à 65536) en séquence, avec une convention particulière pour les plus grands.
Par conséquent, à moins qu'il ne commence par un « Byte Order Mark » (BOM), sans précision sur la langue utilisée il est difficile voire impossible de le dire. Cela dit, si le texte est un un fichier HTML, c'est plus facile car tout le début est de l'ASCII 7bits.
À priori, un fichier UTF-16, selon qu'il a un BOM ou non, et selon qu'il est Big Endian ou Little Endian, commence comme ceci (## représente un caractère undéterminé, compris entre 20 et 7E) :
UTF-16 BE avec BOM : FE FF 00 ## 00 ## 00 ## ... UTF-16 BE sans BOM : 00 ## 00 ## 00 ## 00 ## ...
UTF-16 LE avec BOM : FF FE ## 00 ## 00 ## 00 ... UTF-16 LE sans BOM : ## 00 ## 00 ## 00 ## 00 ...
Voir aussi ceci pour des fichiers XML : <http://www.w3.org/TR/2004/REC-xml-20040204/#sec-guessing>.
-- Olivier Miakinen Non, monsieur le juge, je vous le jure : jamais je n'ai cité Bruxelles dans ma signature.
Guillaume Bouchard
Benoît wrote:
Bonjour,
Bonjour.
1ère solution : récupérer le charset dans la balise <meta> du fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1 même s'il a été enregistré en Unicode(UTF-16).
Rien compris. tu ouvres ta page avec file_get_contents, je ne vois pas où IE intervient ici... Après si quand tu veux sauvegarder une page sur ton disque et que lorsque tu fait cela, IE à la bonne idee de changer la balise meta pour son propre plaisir, c'est con... :( (Change de navigateur :))
Maitenant j'aimerais juste corriger un abut de langague non grave ici mais qui est interessant de savoir. Unicode n'est en rien utf-16...
Unicode c'est la vue de l'esprit qui represente les caractères.
Utf-8/16/ascii/iso-8859-1 sont des encodages qui esseye de representer les caractères.
Pour paralleliser. Quand tu comptes. le nombre sept n'est qu'une vu de l'esprit qui represente 7 élements. Ce sept est universel, même les kligons/martion/marklor utilise le sept, c'est l'unicode.
Maitenant "sept",7, 111 (Binaire) 10 (base 7), VII (romain),rwx (7 en unixien) c'est la façon de representer ton sept et cela c'est les encodages (utf-8/16, ascii, ce que tu veux)
2ème solution : utiliser un algorithme plus ou moins complexe qui permet de détecter l'encodage avec lequel a été créer le fichier.
Plus ou moins complexe et totalement non certain comme je te le disait dans mon autre mail. Si les encodages pouvaient se reconaitre, on ne prendrait pas la peine de les indiquer dans les entetes... Tu auras donc des résultats justes et d'autre totalement erronés.
L'idéal serait de pouvoir détecter l'encodage peut importe le navigateur et sa version.
Mais je comprend pas là. Tu fais du php, il n'y a aucun navigateur dans l'histoire...
Merci pour votre aide.
De rien, j'apporte des questions en plus sans réponses...
-- Guillaume.
Benoît wrote:
Bonjour,
Bonjour.
1ère solution : récupérer le charset dans la balise <meta> du
fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1
même s'il a été enregistré en Unicode(UTF-16).
Rien compris. tu ouvres ta page avec file_get_contents, je ne vois pas
où IE intervient ici...
Après si quand tu veux sauvegarder une page sur ton disque et que
lorsque tu fait cela, IE à la bonne idee de changer la balise meta pour
son propre plaisir, c'est con... :( (Change de navigateur :))
Maitenant j'aimerais juste corriger un abut de langague non grave ici
mais qui est interessant de savoir. Unicode n'est en rien utf-16...
Unicode c'est la vue de l'esprit qui represente les caractères.
Utf-8/16/ascii/iso-8859-1 sont des encodages qui esseye de representer
les caractères.
Pour paralleliser. Quand tu comptes. le nombre sept n'est qu'une vu de
l'esprit qui represente 7 élements. Ce sept est universel, même les
kligons/martion/marklor utilise le sept, c'est l'unicode.
Maitenant "sept",7, 111 (Binaire) 10 (base 7), VII (romain),rwx (7 en
unixien) c'est la façon de representer ton sept et cela c'est les
encodages (utf-8/16, ascii, ce que tu veux)
2ème solution : utiliser un algorithme plus ou moins complexe qui
permet de détecter l'encodage avec lequel a été créer le fichier.
Plus ou moins complexe et totalement non certain comme je te le disait
dans mon autre mail. Si les encodages pouvaient se reconaitre, on ne
prendrait pas la peine de les indiquer dans les entetes... Tu auras donc
des résultats justes et d'autre totalement erronés.
L'idéal serait de pouvoir détecter l'encodage peut importe le
navigateur et sa version.
Mais je comprend pas là. Tu fais du php, il n'y a aucun navigateur dans
l'histoire...
Merci pour votre aide.
De rien, j'apporte des questions en plus sans réponses...
1ère solution : récupérer le charset dans la balise <meta> du fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1 même s'il a été enregistré en Unicode(UTF-16).
Rien compris. tu ouvres ta page avec file_get_contents, je ne vois pas où IE intervient ici... Après si quand tu veux sauvegarder une page sur ton disque et que lorsque tu fait cela, IE à la bonne idee de changer la balise meta pour son propre plaisir, c'est con... :( (Change de navigateur :))
Maitenant j'aimerais juste corriger un abut de langague non grave ici mais qui est interessant de savoir. Unicode n'est en rien utf-16...
Unicode c'est la vue de l'esprit qui represente les caractères.
Utf-8/16/ascii/iso-8859-1 sont des encodages qui esseye de representer les caractères.
Pour paralleliser. Quand tu comptes. le nombre sept n'est qu'une vu de l'esprit qui represente 7 élements. Ce sept est universel, même les kligons/martion/marklor utilise le sept, c'est l'unicode.
Maitenant "sept",7, 111 (Binaire) 10 (base 7), VII (romain),rwx (7 en unixien) c'est la façon de representer ton sept et cela c'est les encodages (utf-8/16, ascii, ce que tu veux)
2ème solution : utiliser un algorithme plus ou moins complexe qui permet de détecter l'encodage avec lequel a été créer le fichier.
Plus ou moins complexe et totalement non certain comme je te le disait dans mon autre mail. Si les encodages pouvaient se reconaitre, on ne prendrait pas la peine de les indiquer dans les entetes... Tu auras donc des résultats justes et d'autre totalement erronés.
L'idéal serait de pouvoir détecter l'encodage peut importe le navigateur et sa version.
Mais je comprend pas là. Tu fais du php, il n'y a aucun navigateur dans l'histoire...
Merci pour votre aide.
De rien, j'apporte des questions en plus sans réponses...
-- Guillaume.
loufoque
Olivier Miakinen a dit le 26/07/2005 à 12:01:
À priori, un fichier UTF-16, selon qu'il a un BOM ou non
Normalement un fichier UTF-16 doit avoir un BOM.
Olivier Miakinen a dit le 26/07/2005 à 12:01:
À priori, un fichier UTF-16, selon qu'il a un BOM ou non
1ère solution : récupérer le charset dans la balise <meta> du fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1 même s'il a été enregistré en Unicode(UTF-16).
Tu dois te tenir à la déclaration. Si celle-ci est erronée, c'est la faute du document, pas la tienne.
Benoît a dit le 26/07/2005 à 01:22:
Je cherche à detecter le type d'encodage d'un fichier html
1ère solution : récupérer le charset dans la balise <meta> du
fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1
même s'il a été enregistré en Unicode(UTF-16).
Tu dois te tenir à la déclaration.
Si celle-ci est erronée, c'est la faute du document, pas la tienne.
1ère solution : récupérer le charset dans la balise <meta> du fichier -> pose un problème car Internet Explorer inscrit ISO-8859-1 même s'il a été enregistré en Unicode(UTF-16).
Tu dois te tenir à la déclaration. Si celle-ci est erronée, c'est la faute du document, pas la tienne.