Demaksieren von Sonderzeichen
DFI10X
- javascript
Hallo,
Gibt es in JS einen Befehl um zb & in "&" umzuwandeln?
Habs mit unescape versucht, dass ist aber wohl nicht dafür zuständig...
Gruß,
DFI10X
Hallo DFI10X,
Ich benutze folgende Funktion, um html-Entities zu erzeugen. Du muesstest eine aehnliche Funktion bauen, aber ntuerlich umgekehrt.
/**
* htmlEntities
*
* Convert all applicable characters to HTML entities
*
* object string
* return string
*
* example:
* test = 'äöü'
* test.htmlEntities() //returns 'äöü'
*/
String.prototype.htmlEntities = function()
{
var chars = new Array ('&','à','á','â','ã','ä','å','æ','ç','è','é',
'ê','ë','ì','í','î','ï','ð','ñ','ò','ó','ô',
'õ','ö','ø','ù','ú','û','ü','ý','þ','ÿ','À',
'Á','Â','Ã','Ä','Å','Æ','Ç','È','É','Ê','Ë',
'Ì','Í','Î','Ï','Ð','Ñ','Ò','Ó','Ô','Õ','Ö',
'Ø','Ù','Ú','Û','Ü','Ý','Þ','€','"','ß','<',
'>','¢','£','¤','¥','¦','§','¨','©','ª','«',
'¬','','®','¯','°','±','²','³','´','µ','¶',
'·','¸','¹','º','»','¼','½','¾');
var entities = new Array ('amp','agrave','aacute','acirc','atilde','auml','aring',
'aelig','ccedil','egrave','eacute','ecirc','euml','igrave',
'iacute','icirc','iuml','eth','ntilde','ograve','oacute',
'ocirc','otilde','ouml','oslash','ugrave','uacute','ucirc',
'uuml','yacute','thorn','yuml','Agrave','Aacute','Acirc',
'Atilde','Auml','Aring','AElig','Ccedil','Egrave','Eacute',
'Ecirc','Euml','Igrave','Iacute','Icirc','Iuml','ETH','Ntilde',
'Ograve','Oacute','Ocirc','Otilde','Ouml','Oslash','Ugrave',
'Uacute','Ucirc','Uuml','Yacute','THORN','euro','quot','szlig',
'lt','gt','cent','pound','curren','yen','brvbar','sect','uml',
'copy','ordf','laquo','not','shy','reg','macr','deg','plusmn',
'sup2','sup3','acute','micro','para','middot','cedil','sup1',
'ordm','raquo','frac14','frac12','frac34');
newString = this;
for (var i = 0; i < chars.length; i++)
{
myRegExp = new RegExp();
myRegExp.compile(chars[i],'g')
newString = newString.replace (myRegExp, '&' + entities[i] + ';');
}
return newString;
}
Gruß,
Dieter
你好 Dieter,
Ich benutze folgende Funktion, um html-Entities zu erzeugen.
[…]
Wenn du diese Funktion anders aufbauen würdest (nämlich mit einem
assoziativen Array und ohne Regexe), dann wäre sie um ein vielfaches
schneller. So muss die Regex-Engine für jedes definierte Entity durch den
String jagen und es ersetzen. Dadurch wird natürlich ein neuer String
erstellt. Das bedeutet viel CPU-Zeit und viel Speicher… Versuchs doch mal
so:
[code lang=javascript]
String.prototype.htmlEntities = function() {
var chars = new Array();
chars['&'] = 'amp';
chars['à'] = 'agrave';
// [… du weisst schon, wie es weitergeht …]
var newstr = '';
for(var i=0;i<this.length;++i) {
if(chars[this.substr(i,1)]) newstr += chars[this.substr(i,1)];
else newstr += this.substr(i,1);
}
return newstr;
}
So muss nur ein einziges mal der String durchlaufen werden – egal, wieviele
Ersetzungen vorgenommen werden müssen.
Du muesstest eine aehnliche Funktion bauen, aber ntuerlich umgekehrt.
Das reicht leider nicht, da dann hier die nummerischen Zeichenreferenzen
nicht umgesetzt werden würden. Da muss man schon mit einem richtigen[tm]
Parser für Entities dran.
再见,
克里斯蒂安