Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Mehrere Aufzählungslisten in Text mit RegEx erkennen und in <ul> und <li> umwandeln [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Mehrere Aufzählungslisten in Text mit RegEx erkennen und in <ul> und <li> umwandeln


 
dreman
04-11-2010, 10:38 
 
Hallo Zusammen,

habe folgendes Problem:

Ich möchte Aufzählungslisten, die der User so eingibt:

Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer at pellentesque libero. Aenean hendrerit egestas dui, quis dignissim nunc convallis eget.

- Haus
- Baum
- Kind

Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.

- Hund
- Katze

Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.


In folgenden HTML-Code umwandeln:

Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Integer at pellentesque libero. Aenean hendrerit egestas dui, quis dignissim nunc convallis eget.

<ul>
<li>Haus</li>
<li>Baum</li>
<li>Kind</li>
</ul>

Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.

<ul>
<li>Hund</li>
<li>Katze</li>
</ul>

Phasellus nec sem ipsum, nec commodo lorem. Mauris elementum neque elit, sit amet sodales enim.


Hat jmd eine Idee, oder sowas schonmal umgesetz?
Bin ich da mit RegEx auf dem richtigen Weg?

Habe folgendes gefunden: Funzt leider nur bedingt und nur für eine Aufzählung im Text.


$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;

Q: http://www.mrunix.de/forums/archive/index.php/t-41061.html


Danke im Voraus!
dreman

 
AmicaNoctis
04-11-2010, 11:13 
 
Hallo,

sieh dir mal preg_split an, damit sollte das problemlos machbar sein.

Ins Blaue geraten und nicht getestet: <^- (.*)$>m

Gruß,

Amica

 
Quetschi
04-11-2010, 11:16 
 
Wo gibt der User das ein? Evtl. wär es sinnvoll ihm dort einen html-Editor zur Verfügung zu stellen? z.B. TinyMCE oder CKEditor.

 
fireweasel
04-11-2010, 23:54 
 
Hallo Zusammen,

habe folgendes Problem:

Ich möchte Aufzählungslisten, die der User so eingibt:
...

In folgenden HTML-Code umwandeln:

...



Das ist kein richtiges HTML, sondern Fließtext, in den ein paar Tags eingeschmuggelt wurden.


Hat jmd eine Idee, oder sowas schonmal umgesetz?


Ein preg_replace_callback() mit der richtigen Helper-Funktion dürfte ausreichen, um das Problem zu erschlagen.


$pcre = '/(?:
-\s+([^\r\n]+)(?=\r?\n(\r?\n)*)|
\r?\n(?=\r?\n-\s+[^\r\n])

)/x';

$html = preg_replace_callback($pcre, '_callback', $raw);
@define('crlf', "\r\n");

function _callback($h) {
if (isset ($h[2])) {
// end of list
return sprintf(' <li>%s</li>%s</ul>', htmlspecialchars($h[1]), crlf);
}
if (!isset ($h[1])) {
// begin of list
return sprintf('%s%s<ul>', crlf, crlf);
}
return sprintf(' <li>%s</li>', htmlspecialchars($h[1]));
}

echo $html;


Das erzeugte HTML bleibt aber unschön, wenn der restliche Fließtext nicht entsprechend "eingefasst" wird. Ich würde dazu <p> oder notfalls <div> benutzen.


Bin ich da mit RegEx auf dem richtigen Weg?


Klar, warum nicht? Nur ist in deinem Beispiel viel zu viel drumherum. Viele Wiki-Engines verwenden übrigens eine ganz ähnliche Wiki-Syntax für Listen. Ein Blick in deren Quelltext könnte sich also lohnen.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:33 Uhr.