Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Aufzählung
hallo zusammen,
ich hab nach langer zeit wiedermal eine frage bezüglich PHP. Ich hoffe ihr könnt mir helfen:
In einer Textarea gibt der User Text ein. Meistens kopiert aus dem Word. Dabei hat es im Text auch Aufzählungen mit Punkten (ASCII= 149). Das sieht etwa so aus:
dies ist eine Aufzählung:\n
(punkt) erstens\n
(punkt) zweitens\n
(punkt) dritens\n
ich möchte jetzt mithilfe von regulären Ausdrücken das ganze in HTML konvertieren.
dies ist eine Aufzählung:\n
<ul>
<li>erstens</li>\n
<li>zweitens</li>\n
<li>dritens</li>\n
</ul>
Das <li> am Anfang ist keine Sache, aber wie finde ich hereaus das ich am Schluss der Zeile ein </li> setzen muss? Und wie weiss ich wo anfang und Ende der Liste ist, damit ich dort <ul> setzen kann? Ich blick da einfach nicht durch.
Könnt ihr mir bitte helfen? Vielen Dank
Romanday
27-09-2005, 22:29
Poste doch mal ein wenig Code aus deiner Word Datei, sonst
wird das hier nix.
hallo,
ich verstehe nicht recht was du mit "Code" aus der worddatei meinst? Im word sieht das dann so aus:
Sie wird auf unterschiedliche Arten gespielt:
• durch Schwingung
• japanische Spielweise
• mit drei Trommeln)
Bildmaterial siehe Fotogalerie
dies gibt der User dann in die textarea ein. daraus möchte ich dann eine aufzählung im html-format machen. ich hoffe ihr könnt damit etwas anfangen.
michael.sprick
28-09-2005, 08:14
Hi,
also das umwandeln in Listenelemente kannst Du so machen:
$String =~ s/\x95(.*?)\n/<li>$1<\/li>\n/sg;
Allerdings wird das noch nicht viel nützen, denn Du musst ja auch noch das einleitende <ul> und das abschließende </ul> einbringen...
Eine Möglichkeit wäre, den String in ein Array zu split()en und dann zeilenweise vorzugehen...
Wenn ein ListItem geöffnet wird und es das erste ist, <ul> einfügen.
Wenn ein ListItem beendet wird und kein weiteres mehr folgt, ein </ul> einfügen.
Ganz einfach könnte man es sich machen, wenn du statt der <li>´s einfach <span>´s oder <div>´s nimmst, und sie entsprechend formatierst. Obwohl das nicht gerade dem Konzept einer Beschreibungssprache entspricht...
hab ein bisschen wenig zeit. Aber ich habe hier eine hässliche, aber funktionierende lösung:
function string_li_insert($s){
$pattern = '=\x95(.*)<br />=';
$zeilen = explode("\n",$s);
$text = "";
$key = 0;
$last = 0;
foreach($zeilen as $key => $z){
if(preg_match($pattern, $z, $txt)){
if($key-$last != 1){
$text = $text."<ul>\n";
}
$last =$key;
$text = $text."<li>".$txt[1]."</li>\n";
}else{
if(($key-$last == 1)and($last != 0)){
$text = $text."</ul>\n";
}
$text = $text.$z."\n";
}
}
return $text;
}
Verbesserungsvorschläge immer willkommen :rolleyes:
danke für eure hilfe
edit: Ah ja das <br /> hat ein nl2br() vorher schon reingeflickt
michael.sprick
28-09-2005, 13:35
so evtl.?
$AnzahlItems = substr_count($string,"\x95");
for($i=0;$i<$AnzahlItems;$i++)
{
$pattern = "/\x95(.*?)<br \/>/";
$replace = $i==0 ? "<ul>\n<li>\\1" : "<li>\\1";
$replace .= $i==$AnzahlItems-1 ? "</li>\n</ul>" : "</li>";
$string = preg_replace("$pattern",$replace,$string,1);
}
echo $string;
auch nicht unbedingt übersichtlicher, oder? ;)
EDIT: Naja... wenn ich´s mir so schön formatiert anseh´, ist evtl. doch etwas einfacher zu lesen, als die andere Lösung :D
oh vielen dank.
Nicht übersichtlicher aber läuft :)
Meine funktion hatte immer wieder probleme
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.