Text Spliten

chinese1

Mitglied
Hi,

ich habe mal wieder ein Anliegen, und zwar geht es darum einen Text auf eine bestimmte weise zu Splitten. Ich weiß garn icht ob dies möglich ist aber man kann ja mal fragen. So zu meinem Problem. Ich hab mir ein kleines Script Geschrieben was auch gut funktioniert.

Schaut es euch mal an:

script:
PHP:
<?php
$text = $textfeld;

$start = 250;   // Anzahl der Zeichen nachdem wird gesplittet
$trenner = "...";

if (strlen($text)) {
$text1 = explode("|&|",chunk_split($text,"$start","|&|"));
$text1n = $text1[0];
$neue_ausgabe = $text1n . "$trenner";

// Ausgabe des Textes nach
echo "$neue_ausgabe";
}
?>

So... mein Problem ist nun folgendes... ich hab mir einen kleinen Editor zusammengebastelt der natürlich auch Bilder Tags einfach per klick ins textfeld machen kann. Wenn ich aber nun z.B. einen img tag im Textfeld habe der genau dazwischen ist wo gesplittet wird, dann ist natürlich das Bild nicht mehr da und es erscheint ein hässliches kleines Bildkächstchen mit nem roten kreuz drin (kennt glaube ich jeder ^^;).

Meine Frage nun kann man da irgendwas machen? Gibt es einen intelligenten Text Splitter?

Gruß & Danke
 
Natürlich, man muss nur etwas scharf über seine Splitkriterien nachdenken. Wenn du z.B. nach dem ersten Punkt auf den ein Leerzeichen folgt trennst und das erst nach mindestens x Leerzeichen, wobei x+1 die Anzahl der darzustellenden Worte ist, hättest du z.B. eine Trennung die nur vollständige Sätze ausspuckt.

Die Situation, dass sie in einem HTML Tag splittet dürfte auch sogut wie nicht vorkommen.

Wenn du allerdings auch in Sätze splitten können willst, dann musst du halt gucken, dass du an Leerzeichen splittet, die davor und danach einen Buchstaben oder eine Zahl haben.

Die einzigen zwei Funktionen die du dafür meiner Meinung nach brauchst sind [phpf]strpos[/phpf] und [phpf]substr[/phpf] und ganz evtl. noch [phpf]in_array[/phpf] oder sowas, wenn du die Zeichen, die vor und nach nem Leerzeichen erlaubt sind in ein Array packen möchtest.

Das jetzt nur mal als Denkanstoß in den Raum gestellt.
 
Ich hab mal eine Funktion geschrieben bei der man die Laenge der Teilstrings angeben konnte und dann nach der entsprechenden Laenge beim jeweils naechsten Leerzeichen gesplittet wird. Die hab ich auch mal hier gepostet, kann ich aber im Moment nicht wiederfinden.
Falls sich Dein Problem zum Wochenende nicht geloest hat werd ich daheim mal schauen, da hab ich die Funktion noch.
 
Naja, das mit dem Leerzeichen ist wesentlich unproblematischer! ;-)

Wenn du mal überlegst ist es eine nette Denkerei da ne ordentliche Logik zu finden. Ich habe mal auf die Shcnelle etwas zusammengebastelt, allerdings hat diese Methode noch einige Schwächen.

- Was ist, wenn genau im "<img" gesplittet wird?
- Was ist, wenn weitere Tags wie z.B. <a href=""...> da rumschwirren?

Wie auch immer, hier mein Ansatz (ich ahbe auch einfach mal das mit den Leerzeichen eingefügt):

PHP:
$text = 'bla';
$trennPos = 250;
$trenner = "...";

//Nur kürzen, wenn der Text länger als $trennPos Zeichen ist
if(strlen($text) > $trennPos)
{
    //Kein Wort trennen, lieber nächstes Leerzeichen suchen
    if(strpos($text,' ', $trennPos) >= 1)
    {
        $trennPos = strpos($text,' ', $trennPos);
    }
    
    $teilText = substr($text, 0, $trennPos);

    $imgPos = strrpos($teilText,'<img');
    //Wenn ein geöffneter, aber nicht geschlossener Bild-Tag am Ende gefunden wurde
    if((strrpos($teilText,'<img') >= 1) && (strpos($teilText,'>',$imgPos) === FALSE))
    {
        $trennPos = strpos($teilText,'>',$imgPos);
    }
    echo substr($text, 0, $trennPos) . $trenner;
}
else
{
    echo $text;    
}

Man kann es auch anders angehen: Man versucht die Zeichen in HTML-Tags nicht mitzuzählen, dafür müsste man sich selbst eine substr()-ähnliche Funktion basteln und über reguläre Ausdrücke die in HTML-Tags enthaltenen Zeichen filtern.

Alles nur Ansätze, viell. bringt dich das ja weiter...
 
Hallo,

danke für die schnellen Antworten werde mal durchprobieren :-)

Melde mich wenn es nicht klapt danke vielmals!

Gruß
 
Zurück