Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment traduire des caractères html en caractères iso ( ou utf8 ) ?

24 réponses
Avatar
Jean Francois Ortolo
Bonjour

Je sèche sur un problème en javascript :

Pour une string, comment convertir des caractères html en caractères
iso ( ou bien utf8 éventuellement ) ?

Après correction de mes insertCell et autres Row, j'obtiens le bon
tableau de stats , mais bouré de chsoes come : <br />, plus des
caractères html tordus.

Je peux difficilement corriger les données en amont ( en php ), car
elles sont enregistrées dans une table mysql.

Merci beaucoup pour vos réponses.

Jean François Ortolo

10 réponses

1 2 3
Avatar
SAM
Le 13/02/15 12:58, Jean Francois Ortolo a écrit :



Bonjour

Je sèche sur un problème en javascript :



<script type="text/javascript" charset="utf-8">

???

ou alors vérifier comment fonctionne le serveur ?

Pour une string, comment convertir des caractères html en caractères
iso ( ou bien utf8 éventuellement ) ?



Normalement il n'y a rien à faire (du moment que tout est écrit , HTML
et JS, dans un charset et qu'il est stipulé soit par meta dans le head
de la page, soit par l'en-tête envoyée par le serveur.

sinon ... la méthode "hexa" :
alert('StxE9phan');
???

Après correction de mes insertCell et autres Row, j'obtiens le bon
tableau de stats , mais bouré de chsoes come : <br />, plus des
caractères html tordus.



On voit ça ou ?

C'est probablement une merdouille de traduction mal t'à propos de champs
de texte (textarea) par le PHP
(insertion/remplacement de retour forcé de lignes (r ou n) par la
balise HTML kivabien mais précédée d'antislash (), ou pire dont le
caractère '<' a été htmlisé en &lt; je dirais.) (le PHP aime bien
htmliser !)

Faire la/les conversions inverses ?

alert('&lt;p>Hi &lt;strong>J-F&lt;/strong>&lt;/p>'.replace( /&lt;/g, '<') );

Je peux difficilement corriger les données en amont ( en php ), car
elles sont enregistrées dans une table mysql.



s'assurer que tout fonctionne suivant le même mode (essentiellement le
charset) serveur *ET* base de donnée

Merci beaucoup pour vos réponses.



ceci étant, ça me fait souvenir d'un problème similaire (caractères
carabistouillés mais sans balises en clair) causé par de l'Ajax ! (et
pour certains navigateurs)
Il m'avait fallu rajouter la déclaration du charset en Xhtml pour chaque
'document' importé.
Malgré le meta charset en HEAD et le charset en SCRIPT, et suite à
l'absence de spécification par le serveur.


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Olivier Miakinen
Le 13/02/2015 12:58, Jean Francois Ortolo a écrit :

Je sèche sur un problème en javascript :

Pour une string, comment convertir des caractères html en caractères
iso ( ou bien utf8 éventuellement ) ?



C'est-à-dire convertir par exemple « &#x153; » en « ½ » ? À vrai dire je
ne sais pas bien ce que tu entends par « caractères html ».

Après correction de mes insertCell et autres Row, j'obtiens le bon
tableau de stats , mais bourré de choses comme : <br />,



C'est-à-dire que le code html contient un truc du genre « &lt;br /&gt; »
ce qui affiche « <br /> », alors que tu voudrais qu'il contienne
« <br /> » et affiche un saut de ligne ?

Ça pourrait être un bug de la page html elle-même, difficile à corriger
en JavaScript sans introduire d'autres bugs ailleurs.

plus des caractères html tordus.



Il existe mille et une façons d'avoir un résultat « tordu ». Si tu ne
dis pas comment il est tordu, on ne pourra pas te dire comment le
remettre droit.

Je peux difficilement corriger les données en amont ( en php ), car
elles sont enregistrées dans une table mysql.



C'est le code php que tu ne peux pas modifier, ou bien le contenu de la
table mysql ? S'il y a un bug dans l'un des deux, tu peux essayer de le
contourner en changeant l'autre, mais en principe il vaudrait mieux
corriger le bug là où il se trouve.

Merci beaucoup pour vos réponses.

Jean François Ortolo



À tout hasard, bien que je ne suis pas sûr que ça soit utile tant que
je n'ai pas compris la question, voici une page permettant des tas de
conversions de caractères entre différents codages :
<http://hapax.qc.ca/conversion.fr.html>.
Avatar
Jean Francois Ortolo
Le 13/02/2015 14:46, Olivier Miakinen a écrit :
Le 13/02/2015 12:58, Jean Francois Ortolo a écrit :

Je sèche sur un problème en javascript :

Pour une string, comment convertir des caractères html en caractères
iso ( ou bien utf8 éventuellement ) ?



C'est-à-dire convertir par exemple « &#x153; » en « ½ » ? À vrai dire je
ne sais pas bien ce que tu entends par « caractères html ».

Après correction de mes insertCell et autres Row, j'obtiens le bon
tableau de stats , mais bourré de choses comme : <br />,



C'est-à-dire que le code html contient un truc du genre « &lt;br /&gt; »
ce qui affiche « <br /> », alors que tu voudrais qu'il contienne
« <br /> » et affiche un saut de ligne ?

Ça pourrait être un bug de la page html elle-même, difficile à corriger
en JavaScript sans introduire d'autres bugs ailleurs.

plus des caractères html tordus.



Il existe mille et une façons d'avoir un résultat « tordu ». Si tu ne
dis pas comment il est tordu, on ne pourra pas te dire comment le
remettre droit.

Je peux difficilement corriger les données en amont ( en php ), car
elles sont enregistrées dans une table mysql.



C'est le code php que tu ne peux pas modifier, ou bien le contenu de la
table mysql ? S'il y a un bug dans l'un des deux, tu peux essayer de le
contourner en changeant l'autre, mais en principe il vaudrait mieux
corriger le bug là où il se trouve.

Merci beaucoup pour vos réponses.

Jean François Ortolo



À tout hasard, bien que je ne suis pas sûr que ça soit utile tant que
je n'ai pas compris la question, voici une page permettant des tas de
conversions de caractères entre différents codages :
<http://hapax.qc.ca/conversion.fr.html>.





Bonjour Monsieur

Par exemple, j'obtiens ( avec shr.responseText ), une chaîne de
caractères, contenant uniquement ces caractères html ( entre autres
caractères normaux non html ) :

&nbsp;
&eacute;
<br />
&#045;
&#037;
&lt;
&#061;

Ce sont ( je crois ), les seuls caractères html susceptibles de se
présenter, vu que c'est moi qui les met ( automatiquement avant
l'affichage du tableau ) dans cette table mysql.

Les scripts sont écrits en utf8, le charset du site est en utf-8, je
peux faire une fonction ad hoc genre : html_to_text(str) :

[code]

function html_to_text(str)
{
var str2 = str.replace("&nbsp;", " ");
var str3 = str2.replace("&eacute;", "é"); ( en utf8 )
str2 = str3.replace("<br />", "n");
str3 = str2.replace("&#045;", '-');
str2 = str3.replace("&#037;", '%');
str3 = str2.replace("&lt;", '<');
str2 = str3.replace("&#061;", '=');

return (str2);
}

[/code]


Merci de me dire si c'est correct.

Respectueusement.

Jean François Ortolo
Avatar
SAM
Le 13/02/15 15:56, Jean Francois Ortolo a écrit :
Le 13/02/2015 14:46, Olivier Miakinen a écrit :
Le 13/02/2015 12:58, Jean Francois Ortolo a écrit :

Je sèche sur un problème en javascript :

Pour une string, comment convertir des caractères html en caractères
iso ( ou bien utf8 éventuellement ) ?



C'est-à-dire convertir par exemple « &#x153; » en « œ » ? À vrai dire je
ne sais pas bien ce que tu entends par « caractères html ».

Après correction de mes insertCell et autres Row, j'obtiens le bon
tableau de stats , mais bourré de choses comme : <br />,



C'est-à-dire que le code html contient un truc du genre « &lt;br /&gt; »
ce qui affiche « <br /> », alors que tu voudrais qu'il contienne
« <br /> » et affiche un saut de ligne ?

Ça pourrait être un bug de la page html elle-même, difficile à corriger
en JavaScript sans introduire d'autres bugs ailleurs.

plus des caractères html tordus.



Il existe mille et une façons d'avoir un résultat « tordu ». Si tu ne
dis pas comment il est tordu, on ne pourra pas te dire comment le
remettre droit.

Je peux difficilement corriger les données en amont ( en php ), car
elles sont enregistrées dans une table mysql.



C'est le code php que tu ne peux pas modifier, ou bien le contenu de la
table mysql ? S'il y a un bug dans l'un des deux, tu peux essayer de le
contourner en changeant l'autre, mais en principe il vaudrait mieux
corriger le bug là où il se trouve.

Merci beaucoup pour vos réponses.

Jean François Ortolo



À tout hasard, bien que je ne suis pas sûr que ça soit utile tant que
je n'ai pas compris la question, voici une page permettant des tas de
conversions de caractères entre différents codages :
<http://hapax.qc.ca/conversion.fr.html>.





Bonjour Monsieur

Par exemple, j'obtiens ( avec shr.responseText ), une chaîne de
caractères, contenant uniquement ces caractères html ( entre autres
caractères normaux non html ) :

&nbsp;
&eacute;
<br />
&#045;
&#037;
&lt;
&#061;



c'est typiquement du html-entité
ce sont les caractères accentués et ceux pouvant peut-être poser
problème (ou non ASCI)

Ce sont ( je crois ), les seuls caractères html susceptibles de se
présenter, vu que c'est moi qui les met ( automatiquement avant
l'affichage du tableau ) dans cette table mysql.



avec une fonction PHP j'imagine


Les scripts sont écrits en utf8, le charset du site est en utf-8, je
peux faire une fonction ad hoc genre : html_to_text(str) :



ce que je ne comprends pas : qu'il ne soit pas possible au sortir de la
BdD que le PHP décode ces entités (comme il a su l'encoder à l'entrée)
<http://php.net/manual/fr/function.htmlentities.php>
<http://php.net/manual/fr/function.html-entity-decode.php>

[code]

function html_to_text(str)
{
var str2 = str.replace("&nbsp;", " ");
var str3 = str2.replace("&eacute;", "é"); ( en utf8 )
str2 = str3.replace("<br />", "n");
str3 = str2.replace("&#045;", '-');
str2 = str3.replace("&#037;", '%');
str3 = str2.replace("&lt;", '<');
str2 = str3.replace("&#061;", '=');

return (str2);
}

[/code]


Merci de me dire si c'est correct.



Là il faut voir s'il n'y a pas possibilité d'une expression régulière ?
(Olivier ! ?)

ou plus simplement ?
str = decodeURI(str.replace(/<br />/g,'n').replace(/&lt;/g,'<'));
ou :
str = unescape(str.replace(/<br />/g,'n').replace(/&lt;/g,'<'));

<http://www.w3schools.com/jsref/jsref_obj_global.asp>
<https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux>
<http://www.w3schools.com/jsref/jsref_decodeuri.asp>
<https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/decodeURI>
<https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/escape>



Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
SAM
Le 13/02/15 16:46, SAM a écrit :

ou plus simplement ?
str = decodeURI(s




Il semblerait que jQuery ait une fonction toute faite pour décoder les
html-entities


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Jean Francois Ortolo
Le 13/02/2015 17:11, SAM a écrit :
Le 13/02/15 16:46, SAM a écrit :

ou plus simplement ?
str = decodeURI(s




Il semblerait que jQuery ait une fonction toute faite pour décoder les
html-entities


Cordialement,




Bonjour Monsieur

J'ai fait :


[code]

function html_to_text(str)
{
var str2 = unescape(str.replace(/&nbsp;/g, ' '));
var str3 = unescape(str2.replace(/&eacute;/g, 'é'));
str2 = unescape(str3.replace(/&#037;/g, '%'));
str3 = unescape(str2.replace(/&lt;/g, '<'));
str2 = unescape(str3.replace(/&#061;/g, '='));
str3 = unescape(str2.replace(/&#045;/g, '-'));
str2 = unescape(str3.replace(/<br />/g, ' '));

return str2;
}

[/code]


Cà marche correctement.

Hélas, quand j'essaye de mettre ( dernière ligne ) :

str2 = unescape(str3.replace(/<br />/g, 'n'));

Là, le tableau ne s'affiche pas, manifestement le script crashe.

Je fais ceci avant chaque affectation de ce type de chaque elem de
texte que j'affecte à mes createTextNode(elem); :

elem = htm_to_text(elem);

Je ne sais pas, il semble qu'il ne supporte pas un saut de ligne lors
de l'affectation. ( sous toutes réserves ).

A part çà çà baigne.

Merci beaucoup de votre aide.

Respectueusement.

Jean François Ortolo
Avatar
SAM
Le 13/02/15 17:32, Jean Francois Ortolo a écrit :

str2 = unescape(str3.replace(/<br />/g, ' '));



Il n'y a plus rien à "unescaper" ici, non ?

str2 = str3.replace(/<br />/g, 'n');

return str2;
}




Sinon j'ai trouvé un convertisseur qui semble assez exhaustif :
<https://mothereff.in/html-entities>
code JS : 40 ko !!!


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Jean Francois Ortolo
Le 13/02/2015 18:33, SAM a écrit :
Le 13/02/15 17:32, Jean Francois Ortolo a écrit :

str2 = unescape(str3.replace(/<br />/g, ' '));



Il n'y a plus rien à "unescaper" ici, non ?

str2 = str3.replace(/<br />/g, 'n');

return str2;
}




Sinon j'ai trouvé un convertisseur qui semble assez exhaustif :
<https://mothereff.in/html-entities>
code JS : 40 ko !!!


Cordialement,




Vous avez raison.

En enlevant le unescape(), et en dédoublant le :

str2 = str3.replace(/<br />/g, 'n');

Cà ne crashe plus, mais les sauts de ligne ( corrects ), ne se voient
pas à l'affichage.

En fait, le code source montre bien des sauts à la ligne, mais en
html, n ne permet pas au texte de sauter à la ligne.

Je vais me renseigner sur le net, c'est un problème classique, de
mettre un saut de ligne web en javascript/ajax.

A part çà, c'est du tout bon.

Maintenant je vais arranger mes pronostics, que je n'affichais que
avec un seul innerHTML pour le tableau.

IE ne peut pas comprendre celà, je vais faire avec mes pronos comme
avec mes stats.

Merci beaucoup si vous avez une solution pour ce saut de ligne.

Respectueusement.

Jean François Ortolo
Avatar
SAM
Le 13/02/15 17:32, Jean Francois Ortolo a écrit :

function html_to_text(str)
{
var str2 = unescape(str.replace(/&nbsp;/g, ' '));
var str2 = unescape(str2.replace(/&eacute;/g, 'é'));
str2 = unescape(str2.replace(/&#037;/g, '%'));
str2 = unescape(str2.replace(/&lt;/g, '<'));
str2 = unescape(str2.replace(/&#061;/g, '='));
str2 = unescape(str2.replace(/&#045;/g, '-'));
str2 = unescape(str2.replace(/<br />/g, ' '));

return str2;
}

Cà marche correctement.



unescape ici ne sert à rien, non ?


Hélas, quand j'essaye de mettre ( dernière ligne ) :

str2 = unescape(str2.replace(/<br />/g, 'n'));



chez moi, cette ligne utilisée seule fonctionne

var str2 = 'bla<br />ble<br />blu'
alert(str2.replace(/<br />/g, 'n'));
ou :
alert(unescape(str2.replace(/<br />/g, 'n')));
hop !
bla
ble
blu

Là, le tableau ne s'affiche pas, manifestement le script crashe.

Je fais ceci avant chaque affectation de ce type de chaque elem de
texte que j'affecte à mes createTextNode(elem); :

elem = htm_to_text(elem);

Je ne sais pas, il semble qu'il ne supporte pas un saut de ligne lors
de l'affectation. ( sous toutes réserves ).



est-ce qu'un textNode *peut* comporter un saut de ligne ?
n'y a t-il pas un textNode de part et d'autre ?

M$ nous dit :
« TextNode object Represents a string of text as a node »
(l'objet TextNode représente une chaine de texte comme un nœud)
<https://msdn.microsoft.com/en-us/library/ie/ms535905%28v=vs.85%29.aspx>


============ = test = (où l'on voit que ça ne marche pas)
============
var texts = [
"Hello World",
"Hello Worldnet JF",
"Hello World<br />et JF",
"Hello World<br />et JF"
],
n = 4;

while(n--) {
var h = document.createElement("H1")
var t = document.createTextNode(texts[n]);
h.appendChild(t);
document.body.appendChild(h)
}


==================== = proposition ====================
function html_to_text(str, lieu)
{
str = str.split(/<br />|n/g,'*');
var n = str.length,
str2 = '',
elem = '';
for (var i= 0; i<n; i++) {
str2 = str[i];
str2 = unescape(str.replace(/&nbsp;/g, ' '));
str2 = unescape(str2.replace(/&eacute;/g, 'é'));
str2 = unescape(str2.replace(/&#037;/g, '%'));
str2 = unescape(str2.replace(/&lt;/g, '<'));
str2 = unescape(str2.replace(/&#061;/g, '='));
str2 = unescape(str2.replace(/&#045;/g, '-'));
elem = document.createTextNode(str2)
lieu.appendChild(elem);
if(i!=(n-1)) lieu.appendChild(document.createElement('BR'));
}
}



Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Jean Francois Ortolo
Le 13/02/2015 19:14, SAM a écrit :
Le 13/02/15 17:32, Jean Francois Ortolo a écrit :

function html_to_text(str)
{
var str2 = unescape(str.replace(/&nbsp;/g, ' '));
var str2 = unescape(str2.replace(/&eacute;/g, 'é'));
str2 = unescape(str2.replace(/&#037;/g, '%'));
str2 = unescape(str2.replace(/&lt;/g, '<'));
str2 = unescape(str2.replace(/&#061;/g, '='));
str2 = unescape(str2.replace(/&#045;/g, '-'));
str2 = unescape(str2.replace(/<br />/g, ' '));

return str2;
}

Cà marche correctement.



unescape ici ne sert à rien, non ?


Hélas, quand j'essaye de mettre ( dernière ligne ) :

str2 = unescape(str2.replace(/<br />/g, 'n'));



chez moi, cette ligne utilisée seule fonctionne

var str2 = 'bla<br />ble<br />blu'
alert(str2.replace(/<br />/g, 'n'));
ou :
alert(unescape(str2.replace(/<br />/g, 'n')));
hop !
bla
ble
blu

Là, le tableau ne s'affiche pas, manifestement le script crashe.

Je fais ceci avant chaque affectation de ce type de chaque elem de
texte que j'affecte à mes createTextNode(elem); :

elem = htm_to_text(elem);

Je ne sais pas, il semble qu'il ne supporte pas un saut de ligne lors
de l'affectation. ( sous toutes réserves ).



est-ce qu'un textNode *peut* comporter un saut de ligne ?
n'y a t-il pas un textNode de part et d'autre ?

M$ nous dit :
« TextNode object Represents a string of text as a node »
(l'objet TextNode représente une chaine de texte comme un nœud)
<https://msdn.microsoft.com/en-us/library/ie/ms535905%28v=vs.85%29.aspx>


============ > = test = (où l'on voit que ça ne marche pas)
============ >
var texts = [
"Hello World",
"Hello Worldnet JF",
"Hello World<br />et JF",
"Hello World<br />et JF"
],
n = 4;

while(n--) {
var h = document.createElement("H1")
var t = document.createTextNode(texts[n]);
h.appendChild(t);
document.body.appendChild(h)
}


==================== > = proposition > ==================== >
function html_to_text(str, lieu)
{
str = str.split(/<br />|n/g,'*');
var n = str.length,
str2 = '',
elem = '';
for (var i= 0; i<n; i++) {
str2 = str[i];
str2 = unescape(str.replace(/&nbsp;/g, ' '));
str2 = unescape(str2.replace(/&eacute;/g, 'é'));
str2 = unescape(str2.replace(/&#037;/g, '%'));
str2 = unescape(str2.replace(/&lt;/g, '<'));
str2 = unescape(str2.replace(/&#061;/g, '='));
str2 = unescape(str2.replace(/&#045;/g, '-'));
elem = document.createTextNode(str2)
lieu.appendChild(elem);
if(i!=(n-1)) lieu.appendChild(document.createElement('BR'));
}
}



Cordialement,




Bonjour Monsieur

Super super merci, vous me tirez une grosse épine du pieds. ;)

Je teste immédiatement.

Super merci.

Respectueusement.

Jean François Ortolo
1 2 3