Avatar billede and_ Nybegynder
06. august 2004 - 15:57 Der er 4 kommentarer og
1 løsning

replace samt regReplace som fejler

jeg prøver igen igen at lave en rensword-cleaner....
Men igen, er javascript ikke min stærke side, så jeg er sgu gået i stå.. Kan slet ikke se mig ud af det...

Alle (eller ihvertfald de fleste) skodtags som word laver, når man paster tekst ind i en wysiwyg editor skal jeg have strippet bedst muligt...

jeg er kommet frem til dette indtil videre, men scriptet fejler hele tiden, når man kører det:

var rensHTML = frames.editor.document.body.innerHTML
rensHTML = rensHTML.replace(/class=MsoNormal/gi, "");
rensHTML = rensHTML.replace(/<p>/gi, "<div>");
rensHTML = rensHTML.replace(/<\/p>/gi, "<\/div>");
rensHTML = rensHTML.replace(/<\ST1[^>]*\>/gi, "");
rensHTML = rensHTML.replace(/<\/ST1[^>]*\>/gi, "");
rensHTML = rensHTML.replace(/<img/gi, "<img border=0 ");
rensHTML = rensHTML.replace(/<o:p>/gi, "");
rensHTML = rensHTML.replace(/<\/o:p>/gi, "");
rensHTML = rensHTML.regReplace("<[/]{0,1}[ ]*(body|html|v:.*?)[ ]*>", "", rensHTML);
rensHTML = rensHTML.regReplace("<\\?xml.*?/>/gi", "", rensHTML);
rensHTML = rensHTML.regReplace("<!DOCTYPE.*?<body[^>]*>", "", rensHTML);
frames.editor.document.body.innerHTML = rensHTML;


Eksempel på den kode fra word som jeg arbejder med pt:

<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Gdffgg</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Df</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Gfd<FONT color=#ff6633>dfgd<FONT style="BACKGROUND-COLOR: #660033">sfsfsfsf</FONT></FONT><FONT style="BACKGROUND-COLOR: #660033">g</FONT> e ghg ffgh</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>Fg</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="mso-spacerun: yes">&nbsp;</SPAN>H</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Fgh rthtrh rt hørtklhktrw</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Lgåhk</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Sflhmdfæh,lfdhwrt</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Hrt</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p>&nbsp;</o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Dette er en <U>test<FONT color=#6699ff> side</FONT></U> af de forskellige styles som <SPAN style="FONT-SIZE: 10pt">skodword klavewr….</SPAN> *Detkæhgdf</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">Bhfgjklæghdf</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">¨hftkælhdfkæhlrkåpherå</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">¨tywey</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">¨rtyhrthtr ,hrt ,mhfggh sdf g,mwer <I style="mso-bidi-font-style: normal"><SPAN style="FONT-SIZE: 24pt">rfqfd, gsrtm</SPAN></I>, ghgerm, ym,4,m n,m<SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ng,.gdfnmh.fgbmælfkdmhæwrlmæyl ew klghterlæk yælwkg jlksdr gelkjtewojtopewjgopwe<B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal">roipjtpoi5</I></B>wji tpow35¨kp totqwj tpj gwetklwægj kshgoisdhyoiåkg wkløej yøow34jyøå 35jn <B style="mso-bidi-font-weight: normal"><I style="mso-bidi-font-style: normal"><U><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Arial Unicode MS'">tæwkl4qh øty62qjøppt</SPAN></U></I></B> op34quj 6tt93q4tui9045uiy</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">g rt</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">gstå¨phwtr ¨åhrt</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">bhtfsjklksfthkoostfhtkåphs r</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">htr </P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">rhtt</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">hrstælæhtejkoph strø pæ kpshtfkåphdfkpå</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P>
<TABLE class=MsoTableGrid style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellSpacing=0 cellPadding=0 border=1>
<TBODY>
<TR style="mso-yfti-irow: 0">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">fdsfsd</P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD></TR>
<TR style="mso-yfti-irow: 1">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">fd<B style="mso-bidi-font-weight: normal">sf</B>sd</P></TD></TR>
<TR style="mso-yfti-irow: 2; mso-yfti-lastrow: yes">
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 122.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.2pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">dsf</P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD>
<TD style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 122.25pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" vAlign=top width=163>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p>&nbsp;</o:p></P></TD></TR></TBODY></TABLE>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt">dfsdfsddsfs</P>
Avatar billede ronin Nybegynder
07. august 2004 - 11:55 #1
Du kunne overveje at bruge HTML-Tidy i stedet <URL:http://www.w3.org/People/Raggett/tidy/>. Din løsning downloader hele siden som Word har lavet den, og retter den så direkte i document.body.innerHTML. Hverken særlig sikkert eller effektivt.

Du siger at det fejler, men ikke hvordan det fejler. Det gør det *meget* svært at gætte hvad fehjlen er. Sker der ikke noget? Eller ser siden forkert ud? Eller får du en fejlbesked.

Du bruger en metode der hedder "regReplace". Jeg kender den ikke, og den er ikke i mine browsere (IE 6, Opera 7, Mozilla FF). Skulle det ikke bare være "replace" (som jo også forstår regulære udtryk)?

Lad os se på reglerne:

    rensHTML = rensHTML.replace(/class=MsoNormal/gi, "");
Her ville jeg tilføje et mellemrum før "class"

    rensHTML = rensHTML.replace(/<p>/gi, "<div>");
    rensHTML = rensHTML.replace(/<\/p>/gi, "<\/div>");
 
Det er en *dårlig* ide at lave <p> om til <div>. Hvis du vil have at dine paragraffer ser anderledes ud, så ændr CSS-stylingen af dem. Hvis du har nogen som helst form for længere tekst på siden, så bør den være i et p-element.

    rensHTML = rensHTML.replace(/<\ST1[^>]*\>/gi, "");
    rensHTML = rensHTML.replace(/<\/ST1[^>]*\>/gi, "");

(Jeg kan ikke se nogen ST1-tag i dokumentet)
Der skal ikke være backslash ("\") før S i den første regel, eller før ">" i
nogen af dem.

    rensHTML = rensHTML.regReplace("<[/]{0,1}[ ]*(body|html|v:.*?)[ ]*>", "", rensHTML);
    rensHTML = rensHTML.regReplace("<\\?xml.*?/>/gi", "", rensHTML);
    rensHTML = rensHTML.regReplace("<!DOCTYPE.*?<body[^>]*>", "", rensHTML);

Disse tre, som kalder den ukendte metode "regReplace" (taget fra et andet sprog, fx LP-C?), forsøger alle at fjerne dele af dokumentet der ligger uden for body. Da du replace'er på document.body.innerHTML, burde de ikke være nødvendige.

Faktisk ligner de noget der har været brugt i et serverside-script for at fjerne alt uden om body så indholdet af en side kan indsættes i en anden.

Jeg vil sige at du bare skal slette dem. Hvis du mener at have brug for dem, så bør de skrives om til Javascript-regExp-udtryk, og de trænger nok også til at blive tunet lidt.
Avatar billede knudx Nybegynder
08. august 2004 - 01:57 #2
brug htmlArea, der er en word-cleaner extension til.
Avatar billede and_ Nybegynder
09. august 2004 - 08:36 #3
knudx >> hvad mener du? Jeg har ikke tid til at skulle kode hele systemet om, for at bruge noget andet....

Editoren er baseret på en iframe, hvor designmode er slået til...

ronin >>
Må ærligt erkende at jeg heller ikke kender regReplace (et script jeg har fået tilsendt for 100 hundrede år tilbage....)...

I den tekst er der heller st1-tag, men de forekommer en gang imellem...
Hvad mener du med downloader? Det er ganske normalt copy/waste...
I mange tilfælde kan det nemmere lige at stille siden op i word og så kopiere indholdet over i iframen.... Problemet er bare at word spasser koden til med alt sit gejl....

Det er dette, som jeg skal have "kørt" igennem for at fjerne disse koder.....
Avatar billede and_ Nybegynder
12. august 2004 - 21:53 #4
...
Avatar billede and_ Nybegynder
12. august 2004 - 21:54 #5
Jeg har brugt en hel tredje løsning...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester