Je traite xhtml en utilisant javascript. Je reçois le contenu du texte d'un nœud div en concaténant la valeur nodeValue de tous les nœuds enfants où nodeType == Node.TEXT_NODE.
La chaîne résultante contient parfois une entité d'espace insécable. Comment puis-je remplacer ceci par un caractère d'espace normal?
Mon div ressemble à ça ...
<div><b>Expires On</b> Sep 30, 2009 06:30 AM</div>
Les suggestions suivantes trouvées sur le Web n'ont pas fonctionné:
var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");
var cleanText = replaceHtmlEntities(text);
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {
"nbsp": " ",
"amp" : "&",
"quot": "\"",
"lt" : "<",
"gt" : ">"
};
return function(s) {
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
}
})();
Aucune suggestion?
C'est beaucoup plus facile que vous ne le faites. Le nœud de texte ne contiendra pas la chaîne littérale " "
, mais le code 160 correspondant.
function replaceNbsps(str) {
var re = new RegExp(String.fromCharCode(160), "g");
return str.replace(re, " ");
}
textNode.nodeValue = replaceNbsps(textNode.nodeValue);
METTRE &AGRAVE; JOUR
Encore plus facile:
textNode.nodeValue = textNode.nodeValue.replace(/\u00a0/g, " ");
Si vous devez seulement remplacer
, vous pouvez utiliser une expression rationnelle beaucoup plus simple:
var textWithNBSpaceReplaced = originalText.replace(/ /g, ' ');
En outre, il existe une faute de frappe dans votre exemple div: &nnbsp;
au lieu de
.
Je pense lorsque vous définissez une fonction avec "var foo = function() {...};
", la fonction n'est définie que après cette ligne. En d'autres termes, essayez ceci:
var replaceHtmlEntites = (function() {
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {
"nbsp": " ",
"amp" : "&",
"quot": "\"",
"lt" : "<",
"gt" : ">"
};
return function(s) {
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
}
})();
var cleanText = text.replace(/^\xa0*([^\xa0]*)\xa0*$/g,"");
cleanText = replaceHtmlEntities(text);
Edit : De plus, utilisez uniquement "var
" la première fois que vous déclarez une variable (vous l'utilisez deux fois sur la variable cleanText
).
Edit 2 : Le problème est l'orthographe du nom de la fonction. Vous avez "var replaceHtmlEntités = ". Il devrait être" var replaceHtmlEntitjees = "
je l'ai utilisé, et cela a fonctionné:
var cleanText = text.replace(/&nbsp;/g,"");
var text = "" &<>";
text = text.replaceHtmlEntites();
String.prototype.replaceHtmlEntites = function() {
var s = this;
var translate_re = /&(nbsp|amp|quot|lt|gt);/g;
var translate = {"nbsp": " ","amp" : "&","quot": "\"","lt" : "<","gt" : ">"};
return ( s.replace(translate_re, function(match, entity) {
return translate[entity];
}) );
};
essayez ceci ..... cela a fonctionné pour moi
Cette première ligne est assez foirée. Il suffit que ce soit:
var cleanText = text.replace(/\xA0/g,' ');
Cela devrait être tout ce dont vous avez besoin.
Supprime tout ce qui existe entre &
et ;
que tous ces symboles ont. si vous voulez vous en débarrasser.
text.replace(/&.*;/g,'');
pour moi, le remplacement ne fonctionne pas ... Essayez le code suivant:
str = str.split(""").join('"');