PHP: bbCode output failar, varför?

Permalänk
Medlem

PHP: bbCode output failar, varför?

Tjenare!

Sitter och testar lite olika grejer till en blogg, hittade en hyffsad bbCode funktion på php.net (ja jag vet att det finns bbCode moduler men men):

http://www.php.net/manual/en/function.bbcode-create.php#93349 <--- Den längst ner där

function bb_parse($string) { $tags = 'b|i|size|color|center|quote|url|img'; while (preg_match_all('`\[('.$tags.')=?(.*?)\](.+?)\[/\1\]`', $string, $matches)) foreach ($matches[0] as $key => $match) { list($tag, $param, $innertext) = array($matches[1][$key], $matches[2][$key], $matches[3][$key]); switch ($tag) { case 'b': $replacement = "<strong>$innertext</strong>"; break; case 'i': $replacement = "<em>$innertext</em>"; break; case 'size': $replacement = "<span style=\"font-size: $param;\">$innertext</span>"; break; case 'color': $replacement = "<span style=\"color: $param;\">$innertext</span>"; break; case 'center': $replacement = "<div class=\"centered\">$innertext</div>"; break; case 'quote': $replacement = "<blockquote>$innertext</blockquote>" . $param? "<cite>$param</cite>" : ''; break; case 'url': $replacement = '<a href="' . ($param? $param : $innertext) . "\">$innertext</a>"; break; case 'img': list($width, $height) = preg_split('`[Xx]`', $param); $replacement = "<img src=\"$innertext\" " . (is_numeric($width)? "width=\"$width\" " : '') . (is_numeric($height)? "height=\"$height\" " : '') . '/>'; break; case 'video': $videourl = parse_url($innertext); parse_str($videourl['query'], $videoquery); if (strpos($videourl['host'], 'youtube.com') !== FALSE) $replacement = '<embed src="http://www.youtube.com/v/' . $videoquery['v'] . '" type="application/x-shockwave-flash" width="425" height="344"></embed>'; if (strpos($videourl['host'], 'google.com') !== FALSE) $replacement = '<embed src="http://video.google.com/googleplayer.swf?docid=' . $videoquery['docid'] . '" width="400" height="326" type="application/x-shockwave-flash"></embed>'; break; } $string = str_replace($match, $replacement, $string); } return $string; }

Dold text

Den koden fungerar helt ok men problemet är att när man försöker göra

Citat:

Jag är en kaka

så outputtas ingenting (gjorde mellanslag så efter quote så inte Sweclockers bbCode tar den)

Kör man såhär:

[quote jag är en häst]jag är en kaka[/quote]

Så outputtas åtminstonde "jag är en häst" inom <cite> taggarna men "jag är en kaka" outputtas inte där heller

Så, någon som har en aning om varför?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

Felet ligger i denna raden:

case 'quote': $replacement = "<blockquote>$innertext</blockquote>" . $param? "<cite>$param</cite>" : ''; break;

den if satsen där i slutet

$param ? "<cite>$param</cite>" : ''

Fungerar inte riktigt som den ska.

om $param (det du skriver [quote HÄR]) innehåller nått så skriver den ut

<cite>$param</cite>

efter quote.
Eller ja, det är i alla fall tanken men if satsen tar även med det innan $param så den kollar nu om

"<blockquote>$innertext</blockquote>" . $param

är sant. vilket den alltid är då en sträng är sant.

Så en lösning. Byt ut raden mot detta:

case 'quote': $replacement = "<blockquote>$innertext</blockquote>"; $replacement .= $param ? "<cite>$param</cite>" : ''; break;

Visa signatur

Mina poster är en illusion. Det som står skrivet här över står i själva verket inte där så inget av det som du läser är sant. Inte ens den här texten. Jag har själv ingen kunskap om det jag skriver och ingen bör således läsa eller ta in den information som står skrivet.

Permalänk
Medlem

Fungerade perfekt, tack så mycket för hjälpen

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?