Styring af resultat...

Tags:    php

<< < 12 > >>
Hej igen...
Ja tror vi starter med en gang kode:
Fold kodeboks ind/udKode 


Overstående script tager $string og udskriver alt mellem [kode][/kode] med syntax highlight og linie tal, og det virker sådan set fint... men da jeg som i det overstående kode valgte at prøve med 2 [kode] boxe skete det at den lavede ret meget lort i det :D
Kan ses her: www.oliemollen.dk/_temp/hangout/test.php

Problemet som jeg ser det er at den tager det første og sidste [kode] tag? istedet for at ta første, og så næste den møder?...

Nogen der har en smart ide/løsning på mit problem...



Indlæg senest redigeret d. 12.06.2007 17:00 af Bruger #1742
14 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Jeg ved ikke... for mig at se gør du det bare lidt mere indviklet, det jeg skrev d. 14-06-07 virker hos mig - meningen er at det lille stykke kode allerede tager hensyn til HTML kode - det håndteres alt sammen som HTML-kode. Der er ikke som sådan noget PHP-kode i $string der bliver evalueret, kun de tre funktioner i klassen $geshi. Meningen er at det kommer til at se nogenlunde således ud:
Fold kodeboks ind/udKode 

hvilket skulle kunne evalueres... så alt outputtet kommer til at ligge i $string igen.

Prøv at bruge den kode jeg skrev d. 14-06-07 og hvis der kommer fejl, skriv dem her.



Indlæg senest redigeret d. 19.06.2007 10:21 af Bruger #3884
Grunden til at det ikke virker med flere boxe er at du bruger preg_match. Preg_match finder kun den første forekomst af '/det der/' i strengen. Du bliver i stedet for nødt til at bruge preg_match_all der finder alle forekomster af '/det der/' i strengen. Dette betyder også at "resultat-arrayet" kommer til at se anderledes ud.
Et foreslag til hvordan du kunne løse problemet var at loope over resultat-arrayet og erstatte det oprindelige [ code ] indhold [ / code ] med det parsede indhold.

Eksempel kunne være:
Fold kodeboks ind/udKode 


Koden er utestet



Indlæg senest redigeret d. 12.06.2007 23:44 af Bruger #3884
Testede det og umidlbart så bliver indholdet i $results ret så underligt?
http://oliemollen.dk/_temp/hangout/test.php << her er så man kan se det..







Indlæg senest redigeret d. 13.06.2007 09:30 af Bruger #3884
Hjalp ik,tværtigmod :)
Tror der er brug for S'et eller tages linieskift ik med så vidst jeg har forstået...

Resultatet kan ses på samme link



Indlæg senest redigeret d. 13.06.2007 09:33 af Bruger #1742
Det er meget underligt, det ser ud som om preg_match_all kun finder det yderste sæt [kode]/[/kode] tags...

Ud over det, er der en måde man kan løse det på, men den er helt anderledes. Det du gør der er at du replacer [kode] med funktionen de skal behandles af og derefter evaluerer hele strengen. Eksempel på dette:
[code]
$string = '
123123aasdasd
[kode]
<?php
echo "OMG! its a code box";[/kode]
lalala
[kode]
echo "teeest";

function lol() {
doshit();
}[/kode]
';
$string = addslashes($string);

$string = str_replace("[kode]", "';\\n\\$geshi =& new geshi(\\"", $string);
$string = str_replace("[/kode]", "\\", $language);\\n\\$geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);\\n\\$string .= \\$geshi->parse_code() . '", $string);

eval('$string = \\'' . $string . '\\';');
echo nl2br(htmlentities($string));



Indlæg senest redigeret d. 16.06.2007 17:30 af Bruger #3884
Jeg kiggede lidt på din ide, ku dog ik helt få din kode til at virke, men lavede noget lignene...
men, den opføre sig lidt underligt..
Som om den ik vil lade mig putte "<?" ind i en string...

http://oliemollen.dk/_temp/hangout/test2.php blir der replaced med "<?"
http://oliemollen.dk/_temp/hangout/test3.php men blir der med "<123"...

og string printer det samme os selvom jeg springer eval over...



1. Prøv at lave mellemrum mellem <? og $geshi, da eval sikkert ikke kan evaluere kode der ser sådan ud: <?$geshi.
2. Det ser for mig ud som om du prøver at evaluere HTML/ikke PHP som PHP-kode, dette undgår du vil at du i din eval funktion starter med
Fold kodeboks ind/udKode 

3. I din eval_string funktion, kommer funktion vidst til at returnere $match[1] i stedet for $string, som du har sat det til. Det er fordi du bliver nød til at lave
Fold kodeboks ind/udKode 

om til
Fold kodeboks ind/udKode 


4. Jeg kan ikke rigtigt se hvad det er du skal med din eval_string funktion, så vidt jeg kan se finder den alt mellem <? og ?> og sætter ind mellem <? og ?>, eller?

anyway... prøv og se om det hjælper



Indlæg senest redigeret d. 18.06.2007 18:24 af Bruger #3884
Det min eval_string function gør er at sikre at den ik prøver at eval html, da det vil fejle...
Hvis jeg bare eval hele $string ville jeg få fejl, da den os indeholder html/ikke php...

Og mellemrum efter <? gør ingen forskel...
Testede med det du mente sku laves om i eval, det gjorde ingen forskel...





prøvede:

Fold kodeboks ind/udKode 


gav:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 19.06.2007 16:25 af Bruger #1742
<< < 12 > >>
t