mboost-dp1
PHP quote funktion
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej alle her på newz.
Jeg har gennem lang tid læst her på siden – men har nu oprettet en bruger, da jeg har behov for hjælp :)
Jeg er ved at udvikle et debatfora i PHP. Jeg vil gerne lave en citationsfunktion som her på newz.
Min problemstilling er nu, at jeg ikke helt ved, hvordan jeg skal gribe det an.
Lad os antage, at citationsfunktionen bliver noget i stil med følgende:
[quote|nickname|timestamp]
Bla bla bla
[/quote]
Hvordan vil I gribe det an I PHP mht. at ”ekstrahere” hhv. nickname og timestamp fra åbnings quote-tagget? Hvis jeg ikke skulle have både nickname og timestamp med, ville jeg jo blot kunne lave en str_replace på både åbnings og luk tagget; men jeg kan ikke umiddelbart overskue, hvordan jeg opnår det jeg vil.
Har I nogle forslag :)? Nogle funktioner som jeg skal kigge på?
På forhånd tak for hjælpen!
Jeg har gennem lang tid læst her på siden – men har nu oprettet en bruger, da jeg har behov for hjælp :)
Jeg er ved at udvikle et debatfora i PHP. Jeg vil gerne lave en citationsfunktion som her på newz.
Min problemstilling er nu, at jeg ikke helt ved, hvordan jeg skal gribe det an.
Lad os antage, at citationsfunktionen bliver noget i stil med følgende:
[quote|nickname|timestamp]
Bla bla bla
[/quote]
Hvordan vil I gribe det an I PHP mht. at ”ekstrahere” hhv. nickname og timestamp fra åbnings quote-tagget? Hvis jeg ikke skulle have både nickname og timestamp med, ville jeg jo blot kunne lave en str_replace på både åbnings og luk tagget; men jeg kan ikke umiddelbart overskue, hvordan jeg opnår det jeg vil.
Har I nogle forslag :)? Nogle funktioner som jeg skal kigge på?
På forhånd tak for hjælpen!
#1
Her er en dansk artikel omkring regular expressions in PHP:
Hvis du havde hele hele strengen separeret af fx colon (:)
Kunne du fx: quote:nickname:timestamp ... og bare brugt en PHP split function på strengen.
Noget i den dur.
Her er en dansk artikel omkring regular expressions in PHP:
Hvis du havde hele hele strengen separeret af fx colon (:)
Kunne du fx: quote:nickname:timestamp ... og bare brugt en PHP split function på strengen.
Noget i den dur.
Ja, men jeg har faktisk den næsten seneste version, som dog har en lille crash-fejl. Den understøtter i hvert fald quote i quote. :P
Hej allesammen!
Tak for jeres svar :)
Jeg har prøvet at kigge på regex, men jeg har svært ved at overskue, hvordan det skal gøres.
Er der nogen af jer som har et eksempel I kan dele (hint, Daniel-Dane)? Det vil jeg sætte meget stor pris på :)
Tak for jeres svar :)
Jeg har prøvet at kigge på regex, men jeg har svært ved at overskue, hvordan det skal gøres.
Er der nogen af jer som har et eksempel I kan dele (hint, Daniel-Dane)? Det vil jeg sætte meget stor pris på :)
Here goes. Hvis han ikke kan lide det, må han slette indlægget. :P
mandalae skrev:Hey,
Du må meget gerne hjælpe. Din funktion virkede ikke i nyheder, men jeg har i stedet lavet den her rekursive funktion som parser alting rigtigt, desværre virker det til at der er et tilfælde hvor den går i uendelig løkke, så hvis du kan spotte det er din hjælp meget velkommen :)static function quoteCallBackLoop($text, $start = 0, $posArr = array()){
preg_match( "/\
+?)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/
s", $text, $match, null, $start);
$pos = strpos($text, $match[0], $start);
if ($pos !== false && !in_array($pos, $posArr) && strlen($match[0]) > 0){
array_push($posArr, $pos);
return Z4_Parse::quoteCallBackLoop($text, $pos+1, $posArr);
} else {
if (count($posArr) > 0) {
$posi = array_pop($posArr);
$newpos = isset($posArr[count($posArr)-1]) ? $posArr[count($posArr)-1] : 0;
$end = strpos($text, '(.+?)? \(([0-9
') - $posi + 8;
$str = substr($text, $posi, $end);
$baseStr = preg_replace( "/\
+?)\)(=.+?,.+?)?\](.+?)\[\/quote\](?!((.*?)\[\/quote\]))/
s", '</p><blockquote cite="\\1 (#\\2)"><p>\\4 <cite><a href="#\\2">\\1 (#\\2)</a></cite></p></blockquote><p>', $str);
$text = substr_replace($text, $baseStr, $posi, $end);
return Z4_Parse::quoteCallBackLoop($text, $newpos, $posArr);
} else {
return $text;
}
}
}
Daniel-Dane, mange tak :)
Jeg får dog en fejl vedr. linje 3. Jeg har sjusset mig frem til, at det har noget at gøre med for mange paranteser, som ikke er lukket.
Har du nogen idé om hvad der går galt? :)
Jeg får dog en fejl vedr. linje 3. Jeg har sjusset mig frem til, at det har noget at gøre med for mange paranteser, som ikke er lukket.
Har du nogen idé om hvad der går galt? :)
Hej igen :)
Det tror jeg nu ikke - men det kan godt være, at du har ret.
Dette er den fejl, som jeg får:
Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 3
Siger det dig noget? Jeg gennemgår lige koden igen, for at sikre mig, at det ikke bare er et linebreak :)
Det tror jeg nu ikke - men det kan godt være, at du har ret.
Dette er den fejl, som jeg får:
Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 3
Siger det dig noget? Jeg gennemgår lige koden igen, for at sikre mig, at det ikke bare er et linebreak :)
@Daniel:
Det er news.dk som har ødelagt det. Prøv selv at se:
"/\+?)\)"
Tegn nr. 5, er en ), uden en foregående ). Jeg gætter på det skulle have været:
"/\((+?)\)"
(Den første slash er en delimiter)
@chimpansen:
At du ikke selv kunne opdage og rettet det er ikke imponerede. Prøv nu forhelvede at bruge lidt energi på at forstå kode, i stedet for bare at copy&paste.
Det er news.dk som har ødelagt det. Prøv selv at se:
"/\+?)\)"
Tegn nr. 5, er en ), uden en foregående ). Jeg gætter på det skulle have været:
"/\((+?)\)"
(Den første slash er en delimiter)
@chimpansen:
At du ikke selv kunne opdage og rettet det er ikke imponerede. Prøv nu forhelvede at bruge lidt energi på at forstå kode, i stedet for bare at copy&paste.
Windcape (12) skrev:@Daniel:
@chimpansen:
At du ikke selv kunne opdage og rettet det er ikke imponerede. Prøv nu forhelvede at bruge lidt energi på at forstå kode, i stedet for bare at copy&paste.
... Check your premisis. Jeg er ikke ude på at imponere dig, så dit udsagn klinger ret hult, bassemand ;)
Derudover løser dit forslag ikke noget - jeg får stadigvæk samme fejl, men jeg værdsætter din hjælp. Det er cool, at du har gjort en indsats og forsøgt at hjælpe :)
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.