Na 4 maanden heb ik al mn moed samengeraapt om het bekende wordwrap()-fenomeen/probleem op te lossen. Ik schets ff een korte geschiedenis:
In den beginne was er de standaard PHP-functie:
[php]
<?= bbcode(wordwrap($data['bericht'], 200, "<br />",1)); ?>
[/php]
Al gauw bleek dat deze functie langs geen kanten werkte (het werkte wel, maar niet naar behoren). Na wat zoeken op het net vond ik nog allerlei mensen die aanliepen tegen de beperkingen van deze standaard PHP-functie. Zo kwam ik een geavanceerdere functie tegen die niet op het aantal tekens wrapped, maar enkel op lange woorden. Voor mij was dit een echte aha-erlebnis en ik testte deze functie dan ook uitvoerig uit:
[php]
<?php
// deze functie vervangt de gebrekkige wordwrap() functie
// deze functie breekt aparte woorden af wanneer ze langer zijn dan een aantal tekens
// ik heb deze functie grondig getest en ze werkt perfect, zowel bij de w (langste teken) als de i (kortste teken)
// het langste woord dat bestaat is ongeveer 50 tekens, dus als je wordwrapped op 50 kan dit geen problemen geven
function cut_word($txt, $where) {
if (empty($txt)) return false;
for ($c = 0, $a = 0, $g = 0; $c<strlen($txt); $c++) {
$d[$c+$g]=$txt[$c];
if ($txt[$c]!=" ") $a++;
else if ($txt[$c]==" ") $a = 0;
if ($a==$where) {
$g++;
$d[$c+$g]="<br />";
$a = 0;
}
}
return implode("", $d);
}
echo bbcode(cut_word($data['bericht'], 60));
?>
[/php]
Deze functie lostte in ieder geval al het probleem op dat ik had met wordwrap(). Nu heb ik nog een (bijkomend) probleem. Een woord zal nooit langer worden dan 60 tekens, maar in een bericht zitten ook html-codes zoals hyperlinks. Als je dan een hyperlink ingeeft die langer is dan 60 tekens (en dat komt dikwijls voor) wordt deze hyperlink afgebroken.
Hier zou ik een oplossing voor willen hebben. Ik zou een functie moeten schrijven die dus voortbouwt op bovenstaande functie, maar die < en > herkent en dan niet de wordwrapfunctie toepast op de delen die tussen < en > staan (maar wel op de andere tekst).
Hoe kan dat?
Een echte uitdaging voor de PHP-programmeur