Avatar billede encorez Nybegynder
28. juni 2003 - 21:02 Der er 27 kommentarer og
1 løsning

fejl ved <p></p>

Hej

Jeg forsøger at lave en teksteditor, hvor man skal kunne skriv html kode. Det gør og¨så fint med at få det til at virke, undtagen når man bruger <p> og </p>.
Man skal skrive html i editoren, så ligger den det over i en db og derefter skal det kunne læses tilbage i editoren igen. Men det vil ikke blive vist i editoren så snart et <p> sniger sig ind.

Hvorfor? og hvordan løses det?
- ud over bare at lave en str_replace() eller sådan noget
Avatar billede tipsen Nybegynder
28. juni 2003 - 21:33 #1
Det giver ikke umiddelbart mening for mig, hvis det fungerer fint med andet html-kode...
Avatar billede encorez Nybegynder
28. juni 2003 - 22:06 #2
Jeg tror jeg har fundet problemet. Jeg har fundet noget kode i mit script som ændre teksten:

// removes all Class attributes on a tag eg. '<p class=asdasd>xxx</p>' returns '<p>xxx</p>'
        code = code.replace(/<([\w]+) class=([^ |>]*)([^>]*)/gi, "<$1$3")
        // removes all style attributes eg. '<tag style="asd asdfa aasdfasdf" something else>' returns '<tag something else>'
        code = code.replace(/<([\w]+) style="([^"]*)"([^>]*)/gi, "<$1$3")
        // gets rid of all xml stuff... <xml>,<\xml>,<\?xml> or <\?xml>
        code = code.replace(/<\\?\??xml[^>]>/gi, "")
            // get rid of ugly colon tags <a:b> or </a:b>
        code = code.replace(/<\/?\w+:[^>]*>/gi, "")
        // removes all empty <p> tags
        code = code.replace(/<p([^>])*>(&nbsp;)*\s*<\/p>/gi,"")
        // removes all empty span tags
        code = code.replace(/<span([^>])*>(&nbsp;)*\s*<\/span>/gi,"")
        return code

Kan du se præcis hvor det går galt mht. <p>
Avatar billede nielle Nybegynder
28. juni 2003 - 22:30 #3
[^>] plejer at betyde "alle tegn der ikke er et >-tegn.

*-multiplyeren betyder 0 eller flere, og den plejer at være "grådig" - dvs at den tager så meget som den kan komme til.

Når du derfor skriver <p([^>]*)> så forsøger den at match så mange ikke->-tegn som den kan komme til (ps: jeg ved ikke helt hvorfor du har parantesrene med - du bruger jo ikke $1 i denne replace). Det at * er grådeg, betyder at du kan få problemer hvis der er flere </p> tags i teksten - idet dit pattern vil forsøge at matche med det sidste.

Du har også et problem med din (&nbsp;)*\s* kosntruktion, som ikke vil virke hvis whitespace kommer før eventuelle &nbsp;'ere (eller blandet med disse).

Mit råd - start først med at gigge godt og grundigt på samtlige dine regulære udtryk. De kunne trænge til det!
Avatar billede nielle Nybegynder
28. juni 2003 - 22:30 #4
gigge -> kigge
Avatar billede nielle Nybegynder
28. juni 2003 - 22:34 #5
Prøv evt med:

code = code.replace(/<p>(&nbsp;|\s)*</p>/gi,"")
Avatar billede encorez Nybegynder
28. juni 2003 - 22:36 #6
det er en editor, jeg har fundet på nettet, så mit script her er ikke "mit" i den forstand at jeg har skrevet det, så jeg kan ikke forklarer noget af alt det der står i det.
Jeg prøvede at fjerne hele denne funktion, men sjovt nok så vil editoren stadig ikke vise teksten, hvis der findes et <p>.
Så måske er problemet alligevel ikke i denne funktion/dette script. Men jeg har ledt hele editoren igennem for <p>-tags og denne stump kode er det eneste sted det forekommer
Avatar billede encorez Nybegynder
28. juni 2003 - 22:43 #7
UNDSKYLD, jeg har lige fundet ud af den funktion kun bliver brugt til at fjerne teksten i editoren for ALT HTML kode. Det er en knap der hedder noget i retning af "clean html".

Så problemet ligger ikke der. Og eftersom jeg ikke kan finde <p>-tagget andre steder i koden, så må der være noget mystisk der gemmer sig
Avatar billede encorez Nybegynder
28. juni 2003 - 22:53 #8
hvordan skriver man at man i strengen $body vil ændre "</p>" til "<br><br>" og bagefter fjerne <p>

Er det ikke det nærmeste alternativ?
Avatar billede encorez Nybegynder
28. juni 2003 - 22:53 #9
det skal skrives i php
Avatar billede nielle Nybegynder
28. juni 2003 - 22:58 #10
Kender desværre noget mindre til php end jeg kender til regulære udtryk, men det må vel være noget i stil med:

code = code.replace(/<\/p>/gi, "<br><br>")
code = code.replace(/<p>/gi, "")
Avatar billede encorez Nybegynder
28. juni 2003 - 23:01 #11
jaa, måske, men det er vist meget javascript
Avatar billede encorez Nybegynder
28. juni 2003 - 23:13 #12
glem den kode, nu er jeg kommet nærmere problemet.

I min db gemmer jeg teksten i en longtext og jeg har nu fundet ud af problemet faktisk kommer lige så snart jeg laver et linieskift i den longtext direkte i databasen.

Det vil sige at hvis der står:
<p>fdsadsa</p>
<p>sfsdafdsf</p>

så virker det ikke.

Men det gør dette:
<p>sadsadsad</p><p>gfdsgkjlk</p>

Så problemet er åbenbart linjeskiftet i den longtext attribut i databasen, så troede måske jeg kunne bruge nl2br(), men det virker ikke
Avatar billede tipsen Nybegynder
28. juni 2003 - 23:17 #13
Det er jo tæt på håbløst at hjælpe dig når det eneste grundlag er dine egne gætterier og ikke en eneste stump (relevant) php-kode...
Avatar billede encorez Nybegynder
28. juni 2003 - 23:18 #14
så enten skal jeg fjerne det linje i koden (ikke selve teksten) inden jeg sætter koden ind i databasen, eller så skal det gøres når jeg har trukket koden ud af databasen
Avatar billede encorez Nybegynder
28. juni 2003 - 23:21 #15
det har du ret i, og det er heller med min gode vilje at jeg ikke poster noget kode. Men problemet er netop at jeg ikke ved hvor problemet er i min 1800 linje lange kode. Så jeg kan nærmest kun præsentere hvordan jeg oplever mit probleme og så håbe på at nogen siger "AHA" og kan se hvad der er galt.
Jeg skulle mene at have lokaliseret problemet nu, som postet i de sidste indlæg, nu skal der bare løses på en måde
Avatar billede tipsen Nybegynder
28. juni 2003 - 23:23 #16
Ellers kan jeg anbefale SPAW editoren:

http://www.solmetra.com/en/disp.php/en_products/en_spaw/en_spaw_about

Det er *skidenemt* at bruge den og sandsynligvis bedre end det du fedter rundt med nu!
Avatar billede encorez Nybegynder
28. juni 2003 - 23:33 #17
Det er et cool design, men prøv at se den jeg har bruger:
http://www.servicelearning.org/article/articleedit/edit/147/wg_php/editor/index.php?edit_textarea=contents_main

Jeg tog den fordi den kun fylde 2 filer. Selven editoren ligger faktisk kun i én fil, så jeg synes det var til at finde rundt i, istedet for flere biblioteker og flere filer, som den du skriver.
Den jeg bruger og sgu også "skidenem" at bruge, der er åbenbart bare dette lille bitteproblem når linjen i koden bliver delt, og det kan ikke passe at nogen ikke ved hvordan det løses.
Avatar billede nielle Nybegynder
29. juni 2003 - 08:51 #18
encorez -> Tja, men hvis din 22:06:54 kode er et eksempel på hvad der er i de 2 filer, så er det godt nok slamkode! Jeg er ikke sikker på at jeg ville røre det med en ildtang.

Mht. dit longtext problem (23:13:33) så kan det meget vel tænkes at du, i scriptet, skal initialisere en eller anden konstant med makslængden sådan en longtext-variabel kan være.

I øvrigt; Det kan da godt tænkes at det er linjeskiftet som er problemet - men det svare jo bare ikke på hvorfor du får dette netop ved <p>-taggen og ingen andre steder!? Og hvorfor overhovedet have et linjeskift? Browseren som skal vise det er ligeglad.
Avatar billede encorez Nybegynder
29. juni 2003 - 10:30 #19
jeg skriver netop i nogle af mine sidste indlæg at jeg nu har fundet ud af at det IKKE er ved <p> alligevel. Problemet opstår når der kommer et linjeskift i min longtext
Avatar billede encorez Nybegynder
29. juni 2003 - 10:50 #20
så måske ligger problemet i denne funktion. Det er her værdien af textområdet bliver sat:

function setValue()
{
//var new_contents = self.opener.document.getElementById("contents_main").value;
foo.document.write('');
foo.document.close()
//foo.document.body.innerHTML = '0'
foo.document.body.innerHTML = '<?=$body?>'
}
$body er selvfølgelig teksten som jeg har hentet ud fra databasen og lagt i en variabel
Avatar billede encorez Nybegynder
03. juli 2003 - 11:29 #21
tipsen -> jeg har opgivet den valgte editor og bruger nu din. Og ja, den er sgu smart, det må jeg sige. Dog har jeg et problem med at indstille hvor den skal hente billeder fra. Altså når jeg i selve editoren trykker på "indsæt billede", så kommer den frem med det nye pop-up vindue og siger at det ikke er konfigureret korrekt. Jeg synes det eneste man kan indstille noget med billeder er i: config/spaw_control.config.php hvor man kan ændre $spaw_base_url, men uanset hvad jeg forsøger at sætte den til, så virker det ikke. Håber du har brugt den og kan svare på dette.

Simon
Avatar billede tipsen Nybegynder
03. juli 2003 - 13:02 #22
Simon: Jeg skal selv bikse med præcis det samme senere i dag og finder forhåbentlig ud af noget!
Avatar billede encorez Nybegynder
05. juli 2003 - 13:17 #23
hej tipsen, du har vel ikke fundet af noget? jeg har stadig ikke kunnet finde det
Avatar billede tipsen Nybegynder
06. juli 2003 - 13:01 #24
Jeg har desværre ikke haft tid til det, men det skal fikses i løbet af de næste par uger (har præcis samme problem som dig!) - jeg kigger måske på det senere på ugen!

Jeg har forøvrigt rettet nogle steder i den danske udgave af toolbaren og regner med at sende rettelserne ind til programmørerne - der var nogle fejl i nogle af oversættelserne!

Vender tilbage senere!
Avatar billede encorez Nybegynder
06. juli 2003 - 13:08 #25
cool, hvis du har rettelser i et dokument, ville jeg også være interesseret i at få dem, hvis du ikke har noget imod det
Avatar billede encorez Nybegynder
22. juli 2003 - 17:37 #26
tipsen-> læg et svar for spaw
Avatar billede tipsen Nybegynder
22. juli 2003 - 17:45 #27
Hvis du har en mailadresse, vil jeg sende den fil jeg har rettet!
Avatar billede encorez Nybegynder
23. juli 2003 - 06:54 #28
lyder godt, send til encorez_crap@hotmail.com
takker
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