reguläre Ausdrücke
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
arve
ausgabe
beitrag
bunten quelltext
dateiname
einfacher gehen
farbe
februar
folgende quelltext
funktion
halbfertiger anleitung
januar
komische meldungen
pack
parameter
pattern
quelltext
tag
veraltete anleitung
vorschaufunktion
-
Mit regul?ren Ausdr?cken habe ich bisher keine Erfahrungen gemacht. Daher bitte ich um einige regexp's mit denen man
1. URL's in einem String in Links umwandeln
und
2. BBCode in normalen HTML-Code umwandeln kann
zu 2.
habe den Ausdruck eben doch noch bei einer Suche gefunden:echo preg_replace( "!\[b\](.*?)\[/b\]!" , "<b>$1</b>" , $string );
mfg
tag/arve">Arve
Beitrag ge?ndert am 4.02.2006 11:43 von arve -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1. Das hier sollte in den meisten F?llen funktionieren -- auch bei fehlerhaften URLs:
function foxy_uri_to_link(
$str = EMPTY_STRING
) {
if($str == EMPTY_STRING) return(EMPTY_STRING);
$pattern = \'=(\\A|[^\\\'\\\"\\=]{1})((http|https|ftp)\\://|(mailto|news|irc)\\:)([^\\s\\<\\>]+)([\\s\\r\\n\\<\\>)]|$)=sm\';
return preg_replace($pattern,\'$1<a href=\"$2$3\">$2$5</a>$6\',$str);
}
*hust* Ich wollte die Funktion eigentlich in [соdе]-Tags packen, aber die Vorschaufunktion zeigte, dass da gar absonderliche PHP-Fehlermeldungen generiert werden ...
Es d?rfte aber auch einfacher gehen. Da du sicher URLs in Flie?texten erkennen willst, und diese dort meist durch Leerzeichen (Whitespaces) vom Rest des Textes getrennt sind, und Whitespaces in URLs sowieso verboten sind:
$neu = preg_replace('((http|https|ftp)\\://|(mailto|news|irc)\\:)([^\s]+)', '<a href="$1$4">$1$4</a>', $alt);
2. Je nach Komplexit?t der BBCodes kann es sein, dass ein einzelner RegExp nicht mehr ausreicht. Kuck dir mal diese Funktion hier an:
http://forum.de.selfhtml.org/archiv/2006/1/t121907/#m784062
Beitrag ge?ndert am 4.02.2006 18:40 von alopex -
Danke erstmal...
$string = preg_replace("!\[code\](.*?)\[/code\]!",'<code>'. htmlentities('\\1',ENT_QUOTES) .'</code>', $string );
Diesen Quelltext wollte ich verwenden um, wie in diesem Forum, Quelltexte "sichtbar" zu machen.
Beim Verarbeiten des Codes gibt es allerdings Probleme.
1. Wie kann man das Problem l?sen und
2. Wie kann man Quelltext gehighlighted ausgeben? (Der folgende Quelltext verursacht die Ausgabe \\1)
$string = preg_replace("!\[php\](.*?)\[/php\]!",'<code>'. highlight_string('\\1') .'</code>', $string );
mfg
Arve -
$string = preg_replace("!\[php\](.*?)\[/php\]!",'<code>'. highlight_string('\\1') .'</code>', $string );
Das geht nicht, da highlight_string() auf '\\1' und nicht auf den durch das Regexp selektierten Text angewendet wird. Ansosnten hast du einen \ zu viel. Zwei brauchst du nur, wenn du doppelte Anf?hrungszeichen benuzt. -
Es gibt da mehrere Probleme:
1.) Schreibt seit Anfang Februar das Lima-Board bei bestimmten Zeichen gerne mal einen zus?tztlichen Backslash. Ist wohl wieder mal irgendein magic_quotes/stripslashes-Problem ...
Man sollte ?brigens bei PCRE f?r die R?ckreferenz-Variablen statt doppelter Backslashes ("\\1") besser das Dollarzeichen ("$1") oder in Sonderf?llen die ausf?hrliche Notation ("${1}") verwenden.
2.) highlight_string() ist eine der Funktionen, die typisch f?r PHP sind. Gut in der Idee -- aber miserabel in der Ausf?hrung. Denn die Funktion gibt normalerweise nichts zur?ck, sondern schreibt direkt in den Ausgabepuffer -- funktioniert also wie print() oder echo(). Deshalb kannst du highlighg_string() nicht einfach mit anderen String-Variablen verketten.
Um einen String als Ergebnis zu bekommen, muss man einen zus?tzlichen Parameter ?bergeben -- eine Eins:
$out = highlight_string($in, 1);
Das steht weder in der deutschen noch in der englischen Online-Doku, obwohl es dieses Feature schon lange gibt.
3.) highlight_string() macht auf Lima-Webspace Probleme. Ich wei? nicht, wie lange schon, aber mir ist es Ende Januar/Anfang Februar 2006 aufgefallen. Es kommen manchmal komische Meldungen, dass irgendwelche "illegalen" Zeichen im Quelltext enthalten w?ren.
4.) Die Farben des Syntax-Highlightings sind nicht frei einstellbar (nur ?ber die PHP.ini). Mir sind die Standard-Farben zu bunt.
5.) Die Ausgabe von highlight_string() ist nicht XHTML-kompatibel.
6.) Wenn der Quelltext nicht von den PHP-Tags "<?php" und "?>" umschlossen wird, geht highlight_string() davon aus, dass es sich um den HTML-Ausgabe-Teil eines PHP-Scriptes handelt. Und den macht es dann schwarz.
Ich habe mir eine Alternative mit Hilfe der Tokenizer-Funktionen gebaut. Allerdings greift die auf CSS-Klassen zur?ck und macht nicht mit <font> oder <span style="color: farbe;"> die Quellcodes bunt ...
Sie hei?t
function foxy_highlight_src( $src = EMPTY_STRING, // Quellcode als String (oder als Dateiname) ) {
ist Teil meiner PHP-Befehls-Sammlung
http://alopex.pyrokar.lima-city.de/index.php/PHP/essentials.html
(Veraltete Anleitung)
http://alopex.pyrokar.lima-city.de/img.php/essentials_all.php
(Download aktuelle Version mit halbfertiger "Anleitung" im Quelltext)
und ben?tigt einen Parameter (die anderen sind optional und funktionieren auch noch nicht richtig).
Es muss eine String-Variable oder ein Dateiname ?bergeben werden.
Zur?ckgegeben wird ein String, der den Quelltext in HTML formatiert enth?lt. Ein Beispiel-CSS, dass daraus "bunten" Quelltext macht, befindet sich hier:
http://alopex.pyrokar.lima-city.de/tpl/default_highlight_src.css
Ansonsten kann ich noch den GeSHi empfehlen. Der kann auch andere Quelltexte "highlighten". Er besitzt neben einem objektorientierten Interface auch eine Funktion, die highlight_string() von PHP prima ersetzen kann.
http://qbnz.com/highlighter/
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage