Ruim een jaar geleden, toen de site nog Engelstalig was, heb ik op deze site een artikel geplaatst (Nederlandstalige versie hier) over het gebruiken van substr() om uit een lap tekst een klein stukje over te houden. Daar zat een bug in, die nu gefixt is.
In het artikel maakte ik een veelgemaakte fout:
1 | $listOnly = substr($original, $listStartingPoint, $listEndingPoint); |
Voor de duidelijkheid: $original bevat een stuk HTML-code met een alinea, gevolgd door een lijst, en daarna weer een alinea. Met deze code wilde ik enkel de lijst over houden. $listStartingPoint bevat het beginpunt van de lijst, en $listEndingPoint het eindpunt van de lijst. Maar, zo werkt de substr()-functie helemaal niet.
Om uit een brontekst (een string), een klein stukje tekst (een substring) over te houden, geef je de brontekst, een beginpunt, en een afstand op. In de bovenstaande code gaf ik een eindpunt op, en dat werkt niet. Wat ik had moeten doen (en hoe het artikel nu ook is aangepast) is eerst uitrekenen hoe lang de substring moet zijn:
1 2 3 | // Eindpunt - beginpunt = afstand $listSize = $listEndingPoint - $listStartPoint; $listOnly = substr($original, $listStartingPoint, $listSize); |
Een voorbeeld waarbij je het beter kan zien: Ik wil uit de tekst Class aptent taciti sociosqu ad litora torquent per conubia nostra. alleen overhouden taciti sociosqu ad litora. Dat doe je dan zo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $bron = "Class aptent taciti sociosqu ad litora torquent per conubia nostra."; // Zoek uit waar "taciti" begint met behulp van strpos() $begin = strpos($bron, "taciti"); // Zoek uit waar "litora" begint met behulp van strpos() $eind = strpos($bron, "litora"); // "litora" is 6 letters lang, dus het eindpunt ligt 6 letters verder $eind = $eind + 6; // Bepaal nu uit hoeveel tekens de tekst "taciti sociosqu ad litora" bestaat $afstand = $eind - $begin; // Haal nu de substring op met behulp van substr() $resultaat = substr($bron, $begin, $afstand); |
Met dank aan Pepijn voor de tip!
Recente reacties