php.de

Zurück   php.de > php.de Intern > Wiki Diskussionsforum > Tutorials

Tutorials Hier findest Du Tutorials, welche nach und nach ein fertiges Script ergeben. Sehen, lernen & verstehen!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.05.2004, 00:13  
Tobias
Gast
 
Beiträge: n/a
Standard "BB-Code" realisieren

hi,

da oft gefragt wird, wie man BB-Code's realisieren kann,
erkläre ich das hier mal mit den BB-Code's [b]Text[/b] und [url]http://phpfriend.de[/url]

Den BB-Code [b]Text[/b] kann man mit preg_replace() "übersetzen":

Code:
$text = ("Ein fetter Text!");
$text = preg_replace("|\[b\](.*)\[/b\]|Uism","$1",$text);
Erklärung zum Pattern-Teil von preg_replace:
[ und ] müssen jeweils mit einem Backslash \ markiert werden.
(.*) ist ein Platzhalter für einen undefinierten Text (wie % bei MySQL-Abfragen).

Die Pattern-Modifiers Uism:
U: Durch den U-Modifier wird PHP nicht versuchen, soviele Chars einzufangen wie nur möglich bis es kein mögliches Ende des Patterns mehr findet.
i: Es wird nicht zwischen GROSS- und klein-Buchstaben unterschieden
s: Dadurch kann man bei (.*)-Wildcards auch mit \r\n usw. arbeiten
m: Ohne m-Modifier würde es nur String-Anfang und -Ende geben. Diese werden über ^ bzw. $ angesprochen.
Im MultiLine-Mode erkennt PHP NewLines und erweitert damt die Wirkung von ^ und $ ..


Etwas schwieriger wird es, wenn man [URL]-Tags ersetzen will und dabei längere URL's gekürzt werden sollen,
dafür wird preg_replace_callback(), create_function(), strlen() und substr() benötigt.

preg_replace_callback() wird benötigt,
weil die URL für den Link-Titel verändert werden soll,
die Funktion ist ähnlich aufgebaut wie preg_replace().
Code:
$text = preg_replace_callback("||Uism","",$text);
Die Pattern-Modifiers sind schon bekannt vom ersten Beispiel,
neu ist hier, dass an zweiter Stelle eine Funktion benötigt wird,
die hier einfachheitshalber mit create_function() erstellt wurde.
Code:
$text = preg_replace_callback("||Uism",create_function('$matches',''),$text);
$matches ist ein Array,
[0] ist der gesamte String des Callback's,
ab [1] kommen dann die Zeichen in den Klammern,
in diesem Fall ist also [1] http:// und [2] der unbekannte Text (.*).

Mit strlen() prüfen wir, ob der String mehr als 30 Zeichen enthält,
wenn dies der Fall ist, werden mit substr($matches[2],0,17) die ersten 17 Zeichen der URL ausgegeben und anschliessend mit substr($matches[2],-5) die letzten 5 Zeichen.

Code:
create_function(
'$matches',
'if (strlen($matches[2]) > 30) {
return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>";
}
')
Wenn der String weniger als 30 Zeichen enthält wird die URL ungekürzt zurückgegeben, gesamter Code:

Code:
$text = ("Die phpfriend.de-Tutorials: http://phpfriend.de/forum/viewforum....r30zeichensind");

$text = preg_replace_callback("|\[url\](http://)(.*)\[/url\]|Uism",create_function(
   '$matches',
   'if (strlen($matches[2]) > 30) {
      return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>";
    } else {
     return "<a href=\"http://".$matches[2]."\" target=_blank>http://".$matches[2]."</a>";
    }
'),$text);
Falls man [php]-Tags benutzen will,
ist die Funktion highlight_string() hilfreich,
highlight_string() kann dann in Kombination mit preg_replace_callback() angewendet werden..

_______________________________
Alle Angaben ohne Gewähr
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.05.2004, 08:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard Re: "BB-Code" realisieren

Zitat:
Zitat von Tobias
U: Dadurch wird verhindert, dass vom ersten [b] bis zum letzten [/b] ersetzt wird
Ungreedy, heisst das Ding.
Greedy = gierig
Ohne U-Modifier wird PHP versuchen soviele Chars einzufangen wie nur möglich, bis es kein mögliches Ende des Patterns mehr findet.

Zitat:
Zitat von Tobias
s: Dadurch kann man auch mit \r\n usw. arbeiten
Was sich aber ausschliesslich auf . auswirkt.
Dieser Meta-Char ist eine Wildcard und passt auf alles. Ausser eben NewLines ... der s-Modifier ändert dies.

Zitat:
Zitat von Tobias
m: Durch diesen Modifier werden die Replacements auch auf mehrere Zeilen angewandt.
Das ist nun aber mal völlig falsch! (bzw. falsch gesagt ^^)

Es bezieht sich auf PHPs erkennung von Zeilen-Ende und -Anfang.
Ohne m-Modifier gibt es nur String-Ende und -Anfang. Diese werden über ^ bzw. $ angesprochen.
Im MultiLine-Mode erkennt PHP NewLines und erweitert damt die Wirkung von ^ und $ ..
Guradia ist offline   Mit Zitat antworten
Alt 28.05.2004, 08:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard Re: "BB-Code" realisieren

Zitat:
Zitat von Tobias
Wenn der String weniger als 30 Zeichen enthält wird die URL ungekürzt zurückgegeben, gesamter Code:

Code:
$text = ("Die phpfriend.de-Tutorials: http://phpfriend.de/forum/viewforum....r30zeichensind");

$text = preg_replace_callback("|\[url\](http://)(.*)\[/url\]|Uism",create_function('$matches','if (strlen($matches[2]) > 30) return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>";
else return "<a href=\"http://".$matches[2]."\" target=_blank>http://".$matches[2]."</a>";'),$text);

Callbacks sind eine feine Sache.
create_function() ist auch ganz niedlich.
Wenn man das ganze aber nicht mehr lesen kann, war es ein Griff ins Klo ^^

Erst nach dem Auseinanderpflücken, konnte ich sehen, was du da eigentlich treibst.
Und ich bin mir jetzt mal nicht so ganz sicher, ob $matches[2] der richtige Index ist ... 1 wäre mein Kandidat ...

Code:
<?php

$text = preg_replace_callback('|\[url\](http://)(.*)\[/url\]|Uism', 'callBack_bbUrl', $text);

function callBack_bbUrl($matches) {
    if (strlen($matches[2]) > 30) {
        return 'http://'.substr($matches[2],0,17).'[...]'.substr($matches[2],-5).''; 
    } else {
        return 'http://'.$matches[2].'';
    }
}

?>
Guradia ist offline   Mit Zitat antworten
Alt 28.05.2004, 09:15  
Tobias
Gast
 
Beiträge: n/a
Standard

hi,

Hab mir schon fast gedacht, dass ich die Modifiers falsch hab ;-)
werd das mal anpassen..

Zitat:
Und ich bin mir jetzt mal nicht so ganz sicher, ob $matches[2] der richtige Index ist ... 1 wäre mein Kandidat ...
[2] ist richtig,
ich benutze das Script in ähnlicher Form u.a. bei Phoogle und es funktioniert:
[0] ist der gesamte String, der zurückgegeben wird beim callback,
und danach werden ja einfach die klammern einzeln hinzugefügt,
und somit ist [1]= http:// ; [2]=.*
  Mit Zitat antworten
Alt 28.05.2004, 09:22  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard

*deng* .. 1. Klammer übersehen ^^
Guradia ist offline   Mit Zitat antworten
Alt 28.05.2004, 15:15  
Gast
 
Beiträge: n/a
Standard

Kennt ihr das???
Da hat jemand mal eine Parserklasse für BBCode geschrieben:
http://www.christian-seiler.de/projekte/php/bbcode/
  Mit Zitat antworten
Alt 28.05.2004, 17:28  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 2.150
Guradia befindet sich auf einem aufstrebenden Ast
Standard

http://pear.php.net/package/HTML_BBCodeParser
http://software.unclassified.de/cont...=code.php.abbc

Diese beiden sind sogar erreichbar ...
Guradia ist offline   Mit Zitat antworten
Alt 28.05.2004, 19:03  
Gast
 
Beiträge: n/a
Standard

Meiner ist jetzt auch wieder on!!!

Ich wollte noch zu dem Tutorial sagen das ich es ehrlich gesagt nicht ganz versteanden habe... du machst das zu ungenau.... Erkläre diese Befehle noch etwas besser... was soll diese variable $1 darstellen?
  Mit Zitat antworten
Alt 19.11.2004, 14:32  
Gast
 
Beiträge: n/a
Standard Re: "BB-Code" realisieren

Zitat:
Zitat von Tobias
Code:
$text = ("Ein fetter Text!");
$text = preg_replace("|\[b\](.*)\[/b\]|Uism","$1",$text);
Erklärung zum Pattern-Teil von preg_replace:
[ und ] müssen jeweils mit einem Backslash \ markiert werden.
(.*) ist ein Platzhalter für einen undefinierten Text (wie % bei MySQL-Abfragen).
Wie funzt das genau...Habe das in mein Code eingebunden, aber der Text wurde nich fett! Was genau hat es mit (.*) auf sich? Wie oder was kommt darein? $text wird doch schon übergeben?!
  Mit Zitat antworten
Alt 19.11.2004, 15:40  
Gast
 
Beiträge: n/a
Standard Re: "BB-Code" realisieren

Zitat:
Zitat von Lukas
Wie funzt das genau...Habe das in mein Code eingebunden, aber der Text wurde nich fett!
Nimm das:
http://test.php-help.info/bbcode-1/ (Quelltext wird angezeigt)

Tobias hatte die fetten HTML Tags vergessen.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit PHP Code HappyDieMuschel PHP Tipps 2008 7 28.05.2008 06:34
[Erledigt] PHP Code aus Datenbank ayti PHP Tipps 2008 8 26.05.2008 19:40
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Nur bestimmten Html Code zulassen? litterauspirna PHP Tipps 2008 5 29.04.2008 12:30
einfacher Code zum Einbinden von "Inhaltsbereichen" MaxDittmann PHP-Fortgeschrittene 6 01.10.2007 15:54
PHP Code in Perl einbinden PHP Tipps 2006 6 22.02.2006 08:03
PHP: Wie parst der Server den Code am schnellsten? SvenLittkowski PHP Tipps 2007 4 17.12.2005 10:58
bb code in htm code wandeln janni PHP Tipps 2007 2 04.11.2005 22:36
[Erledigt] JS Code in PHP Code?? HTML, Usability und Barrierefreiheit 12 08.08.2005 15:45
Seite 1/2/3..Code was haltet ihr davon? Matthiasnet PHP Tipps 2005-2 4 29.07.2005 20:29
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
code aus db mit eval replacen chief-thomson PHP Tipps 2005-2 4 08.07.2005 15:33
code verstecken Skazi PHP Tipps 2005 4 19.01.2005 13:51
[Erledigt] bb code innerhalb von bb code geht nicht PHP Tipps 2007 2 12.01.2005 17:29
Problem mit COde PHP Tipps 2004 5 28.08.2004 16:04

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
bbcode sonderzeichen, &amp;amp;, sonderzeichen bbcode, amp;amp;quot, &amp quot bedeutung, preg_replace_callback create_function, &amp;amp;amp;amp;quot, http://www.php.de/tutorials/2281-bb-code-realisieren.html, quot bedeutung, &amp;amp;&amp;amp; bedeutung, ampersand in url string nicht ersetzen, bei schrift &quot, http://www.bbcode sonderzeichen bei url.net/, &amp;quot bedeutung, uism tutorial, bbcode steuerzeichen, php mysql text ersetzten ampersand, amp;quot, % am bb als steuerzeichen, preg_replace_callback bbcode

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.