| Gast | Hi Dacar!
Da ich als unterbeschäftiger Praktikant viiieeel Zeit habe, hab ich mich mal an Dein Problem rangewagt. Das Skript teilt einen Text in zwei (!) Teile, wobei es weder Wörter noch Tags zerreisst.
Sollte sich der Bruchpunkt in mitten eines Span-Tags o.Ä. befinden, wird der Tag vor dem Bruchpunkt geschlossen und dahinter mit den selben Parametern wieder geöffnet.
Verschachtelte Tags werden nicht als Solche erkannt. Das wäre wohl ein bissl zu viel Fummelei für ne kostenlose arbeit
Sag mir, ob Du's brauchen konntest. Gruß Idefix! PHP-Code: <?php
function teileText($text) {
// Suche Mitte des Strings...
$bruchpunkt = abs(strlen($text) / 2);
$linke_spalte = substr($text, 0, $bruchpunkt);
//
// +---------------------------------------------------------------------+
// | Folgende Fälle müssen ausgeschlossen werden: |
// | |
// | 1. Der Bruchpunkt befindet sich in einem Wort! |
// | 2. Der Bruchpunkt befindet sich in mitten eines Tags |
// | 3. Der Bruchpunkt wird von einem Start und Schlusstag umklammert! |
// | (Sollte dies der Fall sein, muß der Tag links vom Br.P. |
// | geschlossen und rechts davon wieder geöffnet werden.) |
// +---------------------------------------------------------------------+
//
// +-----------------------------------------------------------+
// | Falls sich der Bruchpunkt in mitten eines Wortes befindet |
// | wird der Punkt nach links verschoben... |
// +-----------------------------------------------------------+
//
$trenn_zeichen = array(" ", ",", ".", "!", "?", "-");
if (!in_array(substr($text, bruchpunkt, 1), $trenn_zeichen)) {
$bruchpunkt = 0;
for ($i=0; $i<count($trenn_zeichen); $i++) {
$neuer_bruchpunkt = strrpos($linke_spalte, $trenn_zeichen[$i]);
if ($neuer_bruchpunkt > $bruchpunkt) $bruchpunkt = $neuer_bruchpunkt + 1;
}
}
//
// +-----------------------------------------------------------+
// | Prüfen, ob sich der Bruchpunkt in einem Tag befindet... |
// +-----------------------------------------------------------+
//
if (strrpos($linke_spalte, "<") > strrpos($linke_spalte, ">")) {
//
// +-------------------------------------------------------+
// | Der Bruchpunkt befindet sich definitiv in einem Tag. |
// | Also: Bruchpunkt nach links, vor den Tag schieben! |
// +-------------------------------------------------------+
//
$bruchpunkt = strrpos($linke_spalte, "<");
$linke_spalte = substr($text, 0, $bruchpunkt);
$rechte_spalte = substr($text, $bruchpunkt);
return array($linke_spalte, $rechte_spalte);
} else {
//
// +-----------------------------------------------------------+
// | Prüfen, ob der Bruchpunkt von Tags umklammert wird... |
// | Der Einfachheit halber gehen wir mal davon aus, das Tags |
// | nicht verschachtelt vorkommen... |
// +-----------------------------------------------------------+
//
$next_tag_start_right = strpos($text, "<", $bruchpunkt);
if (substr($text, $next_tag_start_right + 1, 1) == "/") {
//
// +-------------------------------------------------------+
// | Direkt rechts vom Bruchpunkt befindet sich ein "</", |
// | was darauf schließen lässt, dass der Bruchpunkt von |
// | einem Tag umklammert wird. |
// | Also: Tag am Bruchpunkt unterbrechen... |
// +-------------------------------------------------------+
//
$next_tag_end_right = strpos($text, ">", $bruchpunkt);
$next_tag_start_left = strrpos($linke_spalte, "<");
$next_tag_end_left = strrpos($linke_spalte, ">");
$next_tag_left = substr($text, $next_tag_start_left, $next_tag_end_left - $next_tag_start_left + 1);
$next_tag_right = substr($text, $next_tag_start_right, $next_tag_end_right - $next_tag_start_right + 1);
$linke_spalte = substr($text, 0, $bruchpunkt) . $next_tag_right;
$rechte_spalte = $next_tag_left . substr($text, $bruchpunkt);
return array($linke_spalte, $rechte_spalte);
}
}
$linke_spalte = substr($text, 0, $bruchpunkt);
$rechte_spalte = substr($text, $bruchpunkt);
return array($linke_spalte, $rechte_spalte);
}
?> PHP-Code: <?php
$str_text = "Mit großer Sorge und Betrübnis haben die EU-Mitglieder auf die deutliche Ablehnung der EU-Verfassung durch die niederländischendff<span style=\"border:solid 1px;\"> Bevölkerung reagiert. In zahlreichen Äußerungen wurde</span> die Befürchtung deutlich, dass der Ratifizierungsprozess gescheitert sein könnte und die Union ihre Handlungsfähigkeit verlieren könne.";
$spalten = teileText($str_text);
?>
<table width="150">
<tr>
<td><?php echo $spalten[0]?></td>
<td><?php echo $spalten[1]?></td>
</tr>
</table> |