| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

04-11-2010, 10:38
|
|
dreman
Registrierter Benutzer
|
|
Registriert seit: May 2005
Beiträge: 137
|
|
Mehrere Aufzählungslisten in Text mit RegEx erkennen und in <ul> und <li> umwandeln
Hallo Zusammen,
habe folgendes Problem:
Ich möchte Aufzählungslisten, die der User so eingibt:
Zitat:
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:
Zitat:
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.
PHP-Code:
$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
|

04-11-2010, 11:13
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
sieh dir mal preg_split an, damit sollte das problemlos machbar sein.
Ins Blaue geraten und nicht getestet: <^- (.*)$>m
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

04-11-2010, 11:16
|
|
Quetschi
PHP Expert
|
|
Registriert seit: Dec 2004
Beiträge: 2.759
|
|
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.
__________________
Drelingdo
Krabonse
Simmannamando
|

04-11-2010, 23:54
|
 |
fireweasel
Registrierter Benutzer
|
|
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
|
|
Zitat:
Zitat von dreman
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.
Zitat:
|
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.
PHP-Code:
$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.
Zitat:
|
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.
__________________
PHP-Code:
class Brick implements Throwable {
// ...
}
Geändert von fireweasel (06-11-2010 um 00:19 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|