Registrieren  •  Login 
  
 
im Forum


 FAQ   Mitgliederliste   Benutzergruppen   Teamseite   Suchen 

ereg_replace + function

 
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
rami
Mitglied
Mitglied



Anmeldedatum: 07.10.2006
Geschlecht: Männlich
Beiträge: 759

BeitragVerfasst am: 10.04.2008, 20:52    Titel: ereg_replace + function

Gibt es eine Möglichkeit ein ereg/preg_replace-"Modifikator" mit einer Funktion zu verändern? Das ging nicht:
PHP-Code:
1
<?php $text ereg_replace("\[tag\]+([[:print:]]+)\[/tag\]"tag_parsen("\\1"), $text); ?>
Nach oben
Benutzer-Profile anzeigen rami ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13740
Wohnort: Wien

BeitragVerfasst am: 11.04.2008, 13:40    Titel:

Natürlich geht das, dafür brauchst du aber eine Callback Funktion Wink
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
<?php

$string 
'>&< Test <&> <"> Test >&<';
$string preg_replace_callback('/(<.*?>)/''my_function'$string);
echo 
$string;

function 
my_function($treffer)
{
    return 
htmlspecialchars($treffer[1]);
}

?>

Die Ausgabe von diesem Beispiel wäre dann >&< Test &lt;&amp;&gt; &lt;&quot;&gt; Test >&<


MfG Christian
_________________
SC:Banner

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rami
Mitglied
Mitglied



Anmeldedatum: 07.10.2006
Geschlecht: Männlich
Beiträge: 759

BeitragVerfasst am: 11.04.2008, 17:31    Titel:

Vielen Dank, wieder was gelernt. Nun wollte ich dies mit Geshi verküpfen, was auch funktioniert (http://raphaelmichel.de/projekte/webmaster-learning/beispiele/bbcodegeshi.php).
Nur jetzt plötzlich beim Einbinden geht es nicht mehr:
$text = preg_replace_callback("/\[php\]+(.*?)\[\/php\]/i", "geshi_php", $text);
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include('geshi/geshi.php');
$path 'geshi/';
function 
geshi_php ($treffer){
  
$geshi =& new GeSHi(stripslashes($treffer[1]), 'php');
  
$code $geshi->parse_code();
  
$code str_replace("<pre class=\"","<b>PHP-Code</b><br /><div class=\"code_html \""$code);
  
$code str_replace("</pre>","</div>"$code);
  return 
$code;
}
function 
geshi_html ($treffer){
  
$geshi =& new GeSHi(stripslashes($treffer[1]), 'html');
  
$code $geshi->parse_code();
  
$code str_replace("<pre class=\"","<b>HTML-Code</b><br /><div class=\"code_html \""$code);
  
$code str_replace("</pre>","</div>"$code);
  return 
$code;
}
$text $row->description_full;
$text preg_replace_callback("/\[php\](.*?)\[\/php\]/i""geshi_php"$text);
$text preg_replace_callback("/\[html\](.*?)\[\/html\]/i""geshi_html"$text);
echo 
$text;
?>
Nach oben
Benutzer-Profile anzeigen rami ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13740
Wohnort: Wien

BeitragVerfasst am: 11.04.2008, 19:17    Titel:

Wie oft muss ich das eigentlich noch jedem beibringen: Für RegEx müssen die Escape Zeichen wirklich vorhanden sein, die sind nicht für PHP um den String zu maskieren, um ein \ für RegEx zu übernehmen muss man es also so schreiben:
Code:
#\\[php\\]#



MfG Christian
---
Tutorial Seite für die bei jedem neuen Thema nachgefragt werden muss?
Find nur ich das lustig? :P

_________________
SC:Banner

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rami
Mitglied
Mitglied



Anmeldedatum: 07.10.2006
Geschlecht: Männlich
Beiträge: 759

BeitragVerfasst am: 11.04.2008, 20:45    Titel:

a) danke, ich vertshe regex halt noch nich ganz
b) die tutorials sind für anfänger, wenn sie nich gefallen dann schau wo anders
c) das war nicht (nur) für mich. ICh aheb es bei mir anders gelöst.
Nach oben
Benutzer-Profile anzeigen rami ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13740
Wohnort: Wien

BeitragVerfasst am: 11.04.2008, 20:50    Titel:

rami hat Folgendes geschrieben:
die tutorials sind für anfänger, wenn sie nich gefallen dann schau wo anders

Die Tutorials sind ja nicht schlecht, ich fands nur lustig, dass man zum Aufsetzen davon gleich Support braucht ^^
War ja nur Spaß, darfst nicht immer so ernst nehmen Wink Mr. Green


MfG Christian
_________________
SC:Banner
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rami
Mitglied
Mitglied



Anmeldedatum: 07.10.2006
Geschlecht: Männlich
Beiträge: 759

BeitragVerfasst am: 11.04.2008, 21:26    Titel:

Bin dir nich böse. Aber es tut immer noch nich:
PHP-Code:
1
<?php $text preg_replace_callback("/\\[php\\](.*?)\\[\\/php\\]/i""geshi_php"$text); 
Nach oben
Benutzer-Profile anzeigen rami ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13740
Wohnort: Wien

BeitragVerfasst am: 11.04.2008, 21:29    Titel:

Das ist jetzt nur eine Vermutung, denn so ein Problem hatte ich mal: Verwende einfache statt der doppelten Anführungszeichen für den RegEx String. Wenn es dann auch noch nicht geht richte ich mir das morgen einmal auf localhost ein und teste es genauer Wink


MfG Christian
_________________
SC:Banner
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rami
Mitglied
Mitglied



Anmeldedatum: 07.10.2006
Geschlecht: Männlich
Beiträge: 759

BeitragVerfasst am: 11.04.2008, 21:35    Titel:

Hilft leider nicht. Wäre zu schön gewesen Laughing
Nach oben
Benutzer-Profile anzeigen rami ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13740
Wohnort: Wien

BeitragVerfasst am: 12.04.2008, 09:52    Titel:

Im übrigens musst du die Ausgabe nicht so ersetzen:
Code:
$code = str_replace("<pre class=\"","<b>HTML-Code</b><br /><div class=\"code_html \"", $code);

Dafür hat Geshi eigene Funktionen eingebaut, mit dem du den "Header" der Codeausgabe festlegen kannst Wink

Zurück zum eigentlichen Problem: Ich habs jetzt einmal mit anderen Anführungszeichen gemacht und irgendwie funktioniert das Testscript dann bei mir:
PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
 
function geshi_php($treffer)
{
    return 
'-->'.$treffer[1].'<---';
}

function 
geshi_html($treffer)
{
    return 
'-->'.$treffer[1].'<---';
}

$text 'test [php]ICH[/php] test';
$text preg_replace_callback('#\\[php\\](.*?)\\[/php\\]#i''geshi_php'$text);
$text preg_replace_callback('#\\[html\\](.*?)\\[/html\\]#i''geshi_html'$text);
echo 
$text;

?>

Probiers mal mit diesen beiden preg_replace_callback-Zeilen aus, dann sollte es gehen Wink


MfG Christian
_________________
SC:Banner
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13740
Wohnort: Wien

BeitragVerfasst am: 14.04.2008, 14:22    Titel:

Nur um dieses Thema zu ergänzen, es gibt bei Regulären Ausdrücken in PHP auch den e Modifier, dieser bietet aber indirekt eine Sicherheistlücke: http://regexp-evaluator.de/tutorial/php-funktionen/preg-replace/

Damit sind aber auch sehr komplizierte Ersetzungen möglich, sofern man an Escaping denkt und es nicht überall verwendet. Ich empfehle die Verwendung des e Modifers nicht, wollte dieses Thema aber nur komplett haben, falls jemand einmal etwas ähnliches braucht Wink


MfG Christian
_________________
SC:Banner
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.
Du kannst Dateien in diesem Forum nicht hochladen.
Du kannst Dateien in diesem Forum nicht herunterladen.

 

Alle Zeiten sind GMT + 1 Stunde
Aktuelles Datum und Uhrzeit: 23.02.2020, 09:14
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!
Software based on work from the phpBB-Group  •  Deutsche Übersetzung von phpBB.de

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]