OVH Cloud OVH Cloud

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 19:34, Jean Francois Ortolo a écrit :
==================== > = proposition > ====================


Ya une erreur dans le split !

Voici vérifié :

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

var texts = "H&eacute;llo le Monde<br />Hello Worldnet
J&#045;Fran&ccdil;ois<br />Hello World<br />et JF&lt;br /><br />Hello
World<br />et JF";
var h = document.createElement("H1");
document.body.appendChild(h)
html_to_text(texts, h)



Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Jean Francois Ortolo
Le 13/02/2015 20:01, SAM a écrit :
Le 13/02/15 19:34, Jean Francois Ortolo a écrit :
==================== >> = proposition >> ==================== >


Ya une erreur dans le split !

Voici vérifié :

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

var texts = "H&eacute;llo le Monde<br />Hello Worldnet
J&#045;Fran&ccdil;ois<br />Hello World<br />et JF&lt;br /><br />Hello
World<br />et JF";
var h = document.createElement("H1");
document.body.appendChild(h)
html_to_text(texts, h)



Cordialement,





Bonjour Monsieur

Comme il n'y a a pas toujours de <br /> dans str, j'ai légèrement
modifié la fonction :

[code]

function html_to_text(str, cell)
{
var index = str.search(/<br />/i);

if(index != -1)
{
str = str.split(/<br />/i);
var n = str.length,
str2 = '',
elem = '';
for (var i= 0; i<n; i++)
{
str2 = str[i];

str2 = unescape(str2.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)
cell.appendChild(elem);
if(i!=(n-1))
{

cell.appendChild(document.createElement('BR'));
}
}
}
else
{
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)
cell.appendChild(elem);
}
}

[/code]


J'ai du déclarer cell comme variable globale au dessus de la fonction :

var cell;

Cà marche impec. ;)

Ce soir, je traficote les trois scripts d'envoi de données des
pronostics, et demain les 6 scripts d'affichage des pronos.

Merci beaucoup beaucoup pour votre aide.

Et reconnaissant.

Respectueusement.

Jean François Ortolo
Avatar
SAM
Le 13/02/15 20:27, Jean Francois Ortolo a écrit :
Le 13/02/2015 20:01, SAM a écrit :
Le 13/02/15 19:34, Jean Francois Ortolo a écrit :
==================== >>> = proposition >>> ==================== >>


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

var texts = "H&eacute;llo le Monde<br />Hello Worldnet
J&#045;Fran&ccdil;ois<br />Hello World<br />et JF&lt;br /><br />Hello
World<br />et JF";
var h = document.createElement("H1");
document.body.appendChild(h)
html_to_text(texts, h)




Comme il n'y a a pas toujours de <br /> dans str, j'ai légèrement
modifié la fonction :



Ça n'a aucune espèce d'importance.
Ce que j'avais proposé marchait pour <br /> et/ou n
et si le response.text n'a pas de retour à la ligne ça ne cause pas
d'erreur.
Le split() ne trouvant pas de séparateur, la chaine d'origine reste
inchangée, on obtient un Array d'un seul élément.
Il n'y a donc pas lieu à doubler la fonction, une fois avec coupure(s)
une fois sans.

Par contre, oui, c'est mieux d'avoir ajouté le drapeau 'i' dans
l'expression de recherche afin de pouvoir considérer aussi <BR>

ça devrait, finalement, plus ressembler à

str = str.split(/<br>|<br></br>|<br />|n/i)

function html_to_text(str, cell)
{
var index = str.search(/<br />/i);

if(index != -1)
{
str = str.split(/<br />/i);
var n = str.length,
str2 = '',
elem = '';
for (var i= 0; i<n; i++)
{
str2 = str[i];

str2 = unescape(str2.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, '-'));



Là, ça revient à faire passer la fonction unescape() six fois sur la chaine.
Ce n'est probablement pas la peine, la chaine a été traduite au 1er
passage :-P
(cf. la proposition)

elem = document.createTextNode(str2)
cell.appendChild(elem);
if(i!=(n-1))
{

cell.appendChild(document.createElement('BR'));
}
}
}
else
{
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)
cell.appendChild(elem);
}
}

[/code]


J'ai du déclarer cell comme variable globale au dessus de la fonction :

var cell;



Je ne vois pas pourquoi, puisque 'cell' est un argument de la fonction ?!

Cà marche impec. ;)



Bon ! Tant mieux.
(ça reste néanmoins à confirmer ... ne serait-ce qu'à cause des autres
type de retour à la ligne que l'on risque de rencontrer)




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

Comme il n'y a a pas toujours de <br /> dans str, j'ai légèrement
modifié la fonction :



Un doute affreux m'effleure !!

Tu as certainement essayé directement :

cell.innerHTML = HRX.responseText;

sans tentative de traduction aucune !

De même si c'est un responseXML ça ne devrait pas à avoir besoin d'être
"traduit"

cf. :
<http://www.w3schools.com/ajax/ajax_xmlhttprequest_response.asp>

introduit dans IE.7
<https://msdn.microsoft.com/en-us/library/ie/ms534369%28v=vs.85%29.aspx>

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

Comme il n'y a a pas toujours de <br /> dans str, j'ai légèrement
modifié la fonction :



Un doute affreux m'effleure !!

Tu as certainement essayé directement :

cell.innerHTML = HRX.responseText;

sans tentative de traduction aucune !

De même si c'est un responseXML ça ne devrait pas à avoir besoin d'être
"traduit"

cf. :
<http://www.w3schools.com/ajax/ajax_xmlhttprequest_response.asp>

introduit dans IE.7
<https://msdn.microsoft.com/en-us/library/ie/ms534369%28v=vs.85%29.aspx>

Cordialement,




Rebonjour Monsieur ;)

J'avais remplacé ( sur mon ordinateur ) les insertCell du remplissage
du tableau, par des :


elem = html_to_text(elem); ( html_to_text() ancienne version )

text = createTextNode(elem); ( Là çà crashe ).

cell.appendChild(text);


J'ai remplacé par :

html_to_text(elem, cell); ( Cà marche ;) ).


Je vais simplement remplacer <br /> par une expression rationnelle
passe-partout, puis simplifier le code de html_to_text() comme vous me
dites.

Ce qui est sur mon site, c'est effectivement ( pour l'instant pour
les pronostics ), du innerHTML, j'ai encore à corriger l'affichage des
pronostics sur mon ordinateur ( même code, je vais condenser le code ;) ).

Normalement tout baigne.

Super merci pour votre aide. ;)

Respectueusement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Bonjour Monsieur

J'ai mis les modifications sur mon site en remote.

Vous pouvez voir :

https://www.pronostics-courses.fr

Les pages concernées, sont les pages internes donnant les stats et
les pronos.

( Site strictement gratuit ).

J'ai minifié le code javacript.

Respectueusement.

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

Vous pouvez voir :
https://www.pronostics-courses.fr

Les pages concernées, sont les pages internes donnant les stats et
les pronos.



Désolé, je ne comprends rien à ce bazar.
Même pas été fichu de trouver la comparaison entre des pronos d'hier et
des résultats d'aujourd'hui
(savoir s'il y a l'once d'une chance de ne pas perdre sa mise à tous coups)

( Site strictement gratuit ).



Quel ticket je dois acheter et où et quand ?
Quelles cases je dois alors cocher ?
Je n'ai vu aucune simulation de quoi que ce soit de tangible !

J'ai minifié le code javacript.



comme ça on risque pas de le juger ;-)


Cordialement,
--
Stéphane Moriaux avec/with iMac-intel 27" & Mac OS X 10.6.8
Avatar
Jean Francois Ortolo
Bonjour Monsieur

Quel navigateur utilisez-vous ?

Que voyez -vous à l'écran ?

Les pronos d'hier figurent effectivement sur le bas à gauche de la
page d'accueil.

Les pages correspondant aux pronos, sont accessibles en cliquant sur
le lien de la course.

C'est intéressant pour moi, d'avoir des indications sur la
compatibilité avec IE ( ou n'importe quel navigateur ).

Merci beaucoup de votre réponse.

Remarque : J'ai redéfini getElementsByName() et getElementById(),
uniquement si IE < 9.

J'aurais besoin de savoir, si une fonction avec deux paramètres (
dont un par défaut), peut être appelée avec un seul paramètre.

La redéfinition de getElementsByName(), est probablement ce qui cause
le problème rencontré.

Respectueusement.

Jean François Ortolo



Le 14/02/2015 22:29, SAM a écrit :
Le 14/02/15 17:04, Jean Francois Ortolo a écrit :

Vous pouvez voir :
https://www.pronostics-courses.fr

Les pages concernées, sont les pages internes donnant les stats et
les pronos.



Désolé, je ne comprends rien à ce bazar.
Même pas été fichu de trouver la comparaison entre des pronos d'hier et
des résultats d'aujourd'hui
(savoir s'il y a l'once d'une chance de ne pas perdre sa mise à tous coups)

( Site strictement gratuit ).



Quel ticket je dois acheter et où et quand ?
Quelles cases je dois alors cocher ?
Je n'ai vu aucune simulation de quoi que ce soit de tangible !

J'ai minifié le code javacript.



comme ça on risque pas de le juger ;-)


Cordialement,
Avatar
Jean Francois Ortolo
Bonjour Monsieur

J'ai corrigé la redéfinition des fonctions getElementById() et
getElementsByName ( seulement pour IE < 9 et dans le cas où elles
n'existent pas ).

Ces redéfinitions ont lieu dans le script compat.js, situé à l'url :

htps://www.pronostics-courses.fr/scripts/compat.js

Je pourrais améliorer la sélectivité de getElementsByName quand
getElementsByTagName n'existe pas, en rajoutant la condition sur balise
dans document.all, mais c'est à voir.

De tout manière, getElementsByTagName existe dans pratiquement tous
les navigateurs.

Respectueusement.

Jean François Ortolo
Avatar
Jean Francois Ortolo
Rebonjour Monsieur

Typo sur l'url.

Respectueusement.

Jean François Ortolo




Le 15/02/2015 11:24, Jean Francois Ortolo a écrit :


Bonjour Monsieur

J'ai corrigé la redéfinition des fonctions getElementById() et
getElementsByName ( seulement pour IE < 9 et dans le cas où elles
n'existent pas ).

Ces redéfinitions ont lieu dans le script compat.js, situé à l'url :

https://www.pronostics-courses.fr/scripts/compat.js

Je pourrais améliorer la sélectivité de getElementsByName quand
getElementsByTagName n'existe pas, en rajoutant la condition sur balise
dans document.all, mais c'est à voir.

De tout manière, getElementsByTagName existe dans pratiquement tous
les navigateurs.

Respectueusement.

Jean François Ortolo



1 2 3