Toon posts:

[js]HTML Pasten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende. Ik heb een online html editor gemaakt en mensen moeten vanuit Word kunnen pasten. Nu wil ik hier alle rotzooitags uithalen en alleen de volgende tags laten staan:

<b></b>
<i></i>
<u></u>

Nu wil ik ook nog (veeleisend he :)) dat <b style=msoStandard.......> wordt vervangen in gewoon <b> Dus rotzooi eruit.

Ik heb mijn html string in een variabele genaamd code. Kan iemand mij op weg helpen hoe dit te doen? In PHP zou ik ereg_replace_all doen, maar in Javascript zou ik het niet zo snel weten.

Thanks voor alle tips.

P.s. Alles tussen de tags blijft dus onveranderd.

  • party42
  • Registratie: Oktober 2000
  • Laatst online: 10:43
tja

ken het probleem. Word HTML is dus echt r*k

Heb het laatst geprobeerd met HTMLTidy. Kreeg toch nog erg veel foutmeldingen terug.

Met andere woorden, ik ken geen oplossing maar hou me wel aanbevolen als je iets vindt.

Everyday's an endless stream, of cigarettes and magazines...


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Hou er ook rekening mee dat de html die gepaste wordt nogal afhankelijk is van je Word versie. Dus erg veel kun je er niet aan standaardiseren. Jij hebt het bijvoorbeeld over b-tags, terwijl Office XP 'netjes' strong-tags gebruikt, zoals het hoort.

  • Willem
  • Registratie: Februari 2001
  • Laatst online: 22-08 22:08
Regular Expressions? (Regex) :)

Motor (of auto) onderhoud bijhouden


  • RM-rf
  • Registratie: September 2000
  • Laatst online: 12:03

RM-rf

1 2 3 4 5 7 6 8 9

Verwijderd schreef op 12 May 2003 @ 14:29:

Ik heb mijn html string in een variabele genaamd code. Kan iemand mij op weg helpen hoe dit te doen? In PHP zou ik ereg_replace_all doen, maar in Javascript zou ik het niet zo snel weten.
PHP gebruikt geen eigen techniek maar gewoon reguliere expressies: die kun je in javascript ook gebruiken:

code:
1
2
var re = new RegExp("\<b[.]*\>", 'i')
jouwString = jouwString.replace(re, '<strong>')


zoek gewoon een tutorial op over 'regular expressions' via google

//edit: Bossie heb gelijk: <B> => <strong>

[ Voor 11% gewijzigd door RM-rf op 12-05-2003 14:36 ]

Intelligente mensen zoeken in tijden van crisis naar oplossingen, Idioten zoeken dan schuldigen


  • Brickman
  • Registratie: Januari 2003
  • Laatst online: 09-08 06:27
Dreamweaver van Macromedia.com moet eens proberen werkt best fijn. Je kunt best veel verschillende soorten websites mee maken zoals php, html, css, xml, ASP.

Thinkpad T500 | Synology HowTo's (CouchPotato, Sickbeard, Periscope, Headphones)


Verwijderd

Ik kan je alleen maar verwijzen naar Crisp's ontzettend coole Tidy Code:
http://therealcrisp.xs4all.nl/upload/tidycode.html
Dat scheelt iig al een heel stuk.
Die andere MS-specifieke attributen kun je misschien ook verwijderen met regexp's en replace.

Verwijderd

Topicstarter
Hmm, die laatste post van Brickman snap ik niet helemaal. Voor de rest lijkt me duidelijk. Dan maar weer met regexps aan de gang :(

Verwijderd

Topicstarter
Let wel dat ik alleen de dingen doorlaat die ik wil hebben en de rest verwijder. Dus ik pak elke HTML Tag, vergelijk die met de tags die ik wil hebben, is het er een van mijn gading, dan doe ik er niks mee en anders gooi ik hem eruit.

Op die manier hou ik alleen de dingen over die ik wil. <B>, <U> en <I> dus. Op de een of andere manier moet ik dus alle HTML Tags die in de string staan in een array gooien en die dan doorlopen als dat kan en dan elke waarde vergelijken.

[ Voor 24% gewijzigd door Verwijderd op 12-05-2003 14:48 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Als je mijn tidycode een beetje verbouwd kan je precies dat bereiken. In feite match ik ook puur op tags, en roep voor elke tag een functie aan. In jouw geval zal die functie dan moeten kijken wat voor tag het is. Is het er een van je gading, dan return je de tag onveranderd (of eventueel gestript van attributen), anders return je een lege string waardoor de tag verwijderd wordt.

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Hmm geinig scriptje heb je daar crisp, die had ik nog niet gezien :) Ga ik ook eens mee experimenteren..

Verwijderd

Topicstarter
Ik ben er bijna uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
function doCleanCode(code)
{
    // lege ruimte tussen tags halen:
    code = code.replace(/>\s*</g, '><');
    
    //split alle tags.
    var regExpr = new RegExp('(<\/[^<>]+>|<[^<>]+\/>|<(link|meta)[^<>]+>|<[^<>]+>(<\/[^<>]+>)?|[^<]+)', 'gi');
    code = code.replace(regExpr, function($1) { return analyseer($1); });        
    return code;
}

function analyseer(tag)
{
    if(tag.match(/\<b[.]*\>/gi))
    {
        tag = "<b>";
        return tag;
    }   
    else if(tag.match(/\<i[.]*\>/gi))
    {
        tag = "<i>";
        return tag;
    }   
    else if(tag.match(/\<u[.]*\>/gi))
    {
        tag = "<u>";
        return tag;
    }
    else if(tag.match(/\<\/b[.]*\>/gi))
    {
        tag = "</b>";
        return tag;
    }   
    else if(tag.match(/\<\/i[.]*\>/gi))
    {
        tag = "</i>";
        return tag;
    }   
    else if(tag.match(/\<\/u[.]*\>/gi))
    {
        tag = "</u>";
        return tag;
    }
    else
    {
        tag="";
        return tag;
    }               
}


Alleen moet ik nu de niet-HTML tags er nog uit zien te filteren en onveranderd laten. Hmmm. Ik denk nog even.

[ Voor 48% gewijzigd door Verwijderd op 12-05-2003 16:22 ]


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 12 May 2003 @ 15:44:
Ik ben er bijna uit:
[...]
Alleen moet ik nu de niet-HTML tags er nog uit zien te filteren en onveranderd laten. Hmmm. Ik denk nog even.
hij kan echt veel eenvoudiger:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function doe() {

  strString = document.getElementById('code').value;

  // strip whitespace between tags
  strString = strString.replace(/>\s*</g, '><');

  var regExpr = new RegExp('<[^<>]+>', 'g');
  strString = strString.replace(regExpr, function($1) { return analyseer($1); });

  document.getElementById('result').value = strString;

}

function analyseer(tag) {

  // tag simplificeren
  tag = tag.replace(/^<(\/?(\w+)).*>$/, '<$1>');
  tag = tag.toLowerCase();

  switch (RegExp.lastParen.toLowerCase()) {

    case 'b':
      return tag;

    case 'i':
      return tag;

    case 'u':
      return tag;

    case 'br':
      return '<br />';

    default:
      return '';

  }

}


;)

Intentionally left blank


Verwijderd

Topicstarter
KOEL, inderdaad beter. Hoe kan ik nu gewoon de data tussen de tags onveranderd returnen? Dus als de tag niet met een < begint en met een > eindigt, dan return gewoon de tag.

Ah shit, dat doet hij al. Ik zag even wat over het hoofd. Thanks!!! _/-\o_

[ Voor 21% gewijzigd door Verwijderd op 12-05-2003 16:40 ]


Verwijderd

Ik heb hiervoor pas ook een scriptje gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Plakt de de gecopieerde tekst, selecteerd daarna alle tekst en verwijderd alle overbodige tags.
function doPaste()
{
    code = OpmaakTekst.document.body.innerHTML;
    
    //Verwijder alle class atributen.
    code = code.replace(/<([\w]+) class=([^ |>]*)([^>]*)/gi, "<$1$3");
    //Verwijder alle style atributen.
    code = code.replace(/<([\w]+) style="([^"]*)"([^>]*)/gi, "<$1$3");
    //Verwijderd alle XML code.
    code = code.replace(/<\\?\??xml[^>]>/gi, "");
    //Verwijderd alle overige MS Word code. 
    code = code.replace(/<\/?\w+:[^>]*>/gi, "");

    OpmaakTekst.document.body.innerHTML = code;
}

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Jemig dat meen je niet? Alweer een online HTML editor.
Ik was wel een trentzetter zeker? :P

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


Verwijderd

En nu eentje die ook in Mozilla werkt :)

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Verwijderd schreef op 13 May 2003 @ 09:31:
En nu eentje die ook in Mozilla werkt :)
midas :)

Intentionally left blank


Verwijderd

yup :) ben nu bezig met Midas, voor een klant die alleen maar Macs heeft, Mozilla is de enige oplossing op dat platform.
Pagina: 1