DFI10X: Demaksieren von Sonderzeichen

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

  1. 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

    1. 你好 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.

      再见,
       克里斯蒂安

      --
      Bruce Lee, der Meister | Neues Design im Thema
      89,7% aller Statistiken sind frei erfunden!
      http://wwwtech.de/