PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Aufzählung



SeCa
27-09-2005, 13:32
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.

SeCa
27-09-2005, 23:26
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...

SeCa
28-09-2005, 12:32
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

SeCa
28-09-2005, 15:03
oh vielen dank.
Nicht übersichtlicher aber läuft :)
Meine funktion hatte immer wieder probleme