Ich möchte gernen einen Text nach 150 Zeichen abschneiden, dabei sollen allerdings Text der von zwei Unterstrichen eingeschlossen ist nicht mitgezählt werden. [...] Hat irgendwer eine Idee wie sich soetwas realisieren lässt?(aus dem SelfHTML Forum)
Folgendes PHP Script leistet das gewünschte:
<?php
// Konfiguration
$string = "Ein kleiner __und sinnloser__ Text mit Lore Ipsum";
$letters = 17;
// Ein paar Variablen zum Kontrollieren des Programmablaufes
$position = 0; # Aktuelle Position im String
$counter = 0; # Zähler, wie viele Buchstaben wir schon haben
$in_nocount = false; # Befinden wir uns innerhalb von __ ?
$new_string = ""; # Neuer String
$rest_string = ""; # Restlicher String
// Solange wir noch nicht genug Buchstaben haben
while($counter < $letters)
{
// Nächsten Buchstaben herrausschneiden
$char = substr($string, $position, 1);
// Sofern es den Anfang oder das Ende eines __ Bereiches darstellt
if($char == "_" AND substr($string, $position + 1, 1) == "_")
{
$new_string .= "__";
// Setze Kontrollvariable $in_nocount auf deren Gegenteil
$in_nocount = $in_nocount ? false : true;
// Und arbeite zwei Zeichen weiter im String
$position += 2;
}
// andernfalls, wenn wir irgendwo im Text sind
else
{
// Zeichen dem neuen String hinzufügen
$new_string .= $char;
// Wenn wir uns nicht in einem __ Bereich befinden, Counter
// hochzählen
if(!$in_nocount)
{
$counter ++;
}
// Position um eins erhönhen für nächsten Durchlauf
$position ++;
}
}
// Rest des Strings ins $rest_string schreiben
$rest_string = substr($string, $position);
// Ausgabe der Daten
echo "<pre>";
echo "Vorgabe: $string\n";
echo "Neuer String: $new_string\n";
echo "Rest String: $rest_string";
echo "</pre>";
?>
Man beachte auch die Version von Christian Kruse, welche noch etwas optimierter ist.