php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 04.01.2009, 03:55  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 6
Sword befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] preg_replace ändert Links

hallo^^

ich habe kürzlich eine Art Gästebuch erstellt (Anfängerprojekt eben) und dort versucht, BBC-Tags verfügbar zu machen.
das hat auch im großen und ganzen gut funktioniert, jedoch fügt mir meine preg_replace-Funktion hinter jeden Link ein / als Adresse an.

außerdem wird mir beim Editieren eines Beitrags ein anderer Inhalt angezeigt, als es in meiner SQL-Datenbank der Fall ist. und das, obwohl ich keinen einzigen Filter beim Edit-Modus benutze...

"meine"-Url-Umwandler:
PHP-Code:
$text preg_replace("/\[url\]www.(.*)\[\/url\]/iUms","<a href=\"http://www.\\1\">[url]http://www.\\1[/url]</a>",$text);
$text preg_replace("/\[url\](.*)\[\/url\]/iUms","<a href=\"\\1\">\\1</a>",$text);
$text preg_replace("/\[url=(.*)\](.*)\[\/url\]/iUms","<a href=\"\\1\">\\2</a>",$text);
$pattern '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
$text preg_replace($pattern,"\\1<a href=\"\\2\\3\"><u>\\2\\3</u></a>\\4",$text); 
der Teil, der nichts verändern sollte:
PHP-Code:
 if($_POST['eddTex']==""){
  
$tex0 "Geben Sie das richtige Passwort an!";
  
$tex1 "(frei lassen, um Beitrag zu löschen)";
  
$tex2 "";
  
$tex3 "";
  
$tex4 "";
 }else{
  
$ub=mysql_fetch_array(mysql_query("Select PW from Gast where Datum like '".$_POST['eddDat']."'"));
  
$ttt = array("","","","");
  if(
$ub[0]==$_POST['eddPW']){
   if(
$_POST['eddNPW']!=""){$ttt[1]="PW = '".$_POST['eddNPW']."'";}
   if(
$_POST['eddBetr']!=""){$ttt[2]="Betreff = '".$_POST['eddBetr']."'";}
   if(
$_POST['eddNam']!=""){
   
$ttt[0]="Name = '".$_POST['eddNam']."'";
   }else{
   
mysql_query("Delete from Gast where Datum like '".$_POST['eddDat']."'");
   echo 
"<br><div align='center'><b>erfolgreich gelöscht!</b></div><br><br><br>";
   echo 
"<meta http-equiv='refresh' content='2; URL=http://sword.bplaced.net/Hauptseite.php'>";
   }
   if(
$_POST['eddTex']!=""){$ttt[3]="Text = '".$_POST['eddTex']."'";}else{$tex4 "Sie müssen einen Text eingeben!";}
   if(
$_POST['eddTex']!="" and $_POST['eddNam']!=""){
    if(
$ttt[1]==""){
     if(
$ttt[2]==""){
      
$beft "UPDATE Gast SET ".$ttt[0].", ".$ttt[3]." where Datum like '".$_POST['eddDat']."'";
     }else{
      
$beft "UPDATE Gast SET ".$ttt[0].", ".$ttt[2].", ".$ttt[3]." where Datum like '".$_POST['eddDat']."'";
     }
    }else{
     if(
$ttt[2]==""){
      
$beft "UPDATE Gast SET ".$ttt[0].", ".$ttt[1].", ".$ttt[3]." where Datum like '".$_POST['eddDat']."'";
     }else{
      
$beft "UPDATE Gast SET ".$ttt[0].", ".$ttt[1].", ".$ttt[2].", ".$ttt[3]." where Datum like '".$_POST['eddDat']."'";
     }
    }
    
mysql_query($beft);
    echo 
"<br><div align='center'><b>erfolgreich geändert!</b></div><br><br><br>";
    echo 
"<meta http-equiv='refresh' content='2; URL=http://sword.bplaced.net/Hauptseite.php'>";
   }
  }else {
  
$tex0 "falsches Passwort!";
  
$_POST['ed1']=$_POST['eddDat'];
  
$_POST['ed0']=$_POST['eddNam'];
  
$_POST['ed2']=$_POST['eddTex'];
  
$_POST['ed3']=$_POST['eddBetr'];
  }
 }
 echo 
"<p style='margin-left:10%;'>Um den Beitrag editieren oder löschen zu können, müssen Sie das dazu passende Kennwort angeben.<br><br><br>";
 echo 
"<div style='margin-left:10%;float:left;width:10%;'><b>Datum:</b><br><b>Passwort:</b><br><br><b>Name:</b><br><b>neues PW:</b><br><b>Betreff:</b><br><b>Text:</b></div>";
 echo 
"<div style='float:left;width:70%;'><form action='http://sword.bplaced.net/Hauptseite.php' method='post'><input type='hidden' name='ed0' value='012343210'><input type='hidden' name='eddDat' value='".$_POST['ed1']."'>".$_POST['ed1']."<br><input style='width:50%' name='eddPW'>&nbsp;".$tex0."<br><br><input type='text' style='width:50%' name='eddNam' type='text' value='".$_POST['ed0']."'>&nbsp;".$tex1."<br><input style='width:50%' name='eddNPW' type='text'>&nbsp;".$tex2."<br><input style='width:50%' name='eddBetr' type='text' value='".$_POST['ed3']."'>&nbsp;".$tex3."<br><textarea rows='7' cols='200' name='eddTex' style='width:100%;height:40%;'>".$_POST['ed2']."</textarea>".$tex4."<br><div align='center'><input type='submit' value='Ändern'></div></form></div>"
sorry, wenn ich beim 2. Problem gleich so viel code poste, allerdings habe ich schon viel darüber rumgehangen und sehe den Fehler einfach nciht^^

Beispiel:
SQL-Datenbank:
PHP-Code:
 [url]http://www.nochntest.de[/url] 
Anzeige-Quelltext:
PHP-Code:
<a href="http://www.nochntest.de"></a><a href="http://www.nochntest.de"><u>http://www.nochntest.de</u></a> 
Edit-Text:
PHP-Code:
<a href="http://www.nochntest.de\"><a href=\"http://www.nochntest.de\"><u>http://www.nochntest.de</u></a></a> 
könnt ihr mir bitte sagen, wieso das sich so seltsam verhält?
Sword ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 04.01.2009, 07:20  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zum Anzeigetext:
Zitat:
$text = preg_replace($pattern,"\\1<a href=\"\\2\\3\"><u>\\2\\3</u></a>\\4",$text);
$text ist an dieser Stelle durch die vorherigen Ersetzungen <a href="http://www.nochntest.de">http://www.nochntest.de</a> und das wird durch
Zitat:
<a href="http://www.nochntest.de"><a href="http://www.nochntest.de"><u>http://www.nochntest.de</u></a></a>
ersetzt.

Zum Edit-Text: Welcher Code gibt das aus?
David ist offline  
Alt 04.01.2009, 16:01  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 6
Sword befindet sich auf einem aufstrebenden Ast
Standard

danke für die schnelle Antwort...

zu 1.
soll ich dann die Reihenfolge umdrehen und erst die html-Links- Umwandeln und dann die BBC-Tags dazu machen, oder ist es besser, etwas davon abzuändern?

zu 2.
der Text ist in der Variable $_POST['eddTex'] abgespeichert.
diese Variable ist eigentlich der Inhalt des Anzeige-Quelltext...
aha... ich sehe gerade, dass ich den umgewandelten Quelltext an das Editierungsformular sende^^ das ist evtl nicht das wahre... hab's jetzt umgestellt und darin keine Probleme mehr...
(Edit-Text=SQL-Daten-Text)
Sword ist offline  
Alt 04.01.2009, 17:00  
lutoma
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Sword Beitrag anzeigen
zu 1.
soll ich dann die Reihenfolge umdrehen und erst die html-Links- Umwandeln und dann die BBC-Tags dazu machen, oder ist es besser, etwas davon abzuändern?
ich würds einfach umdrehen
 
Alt 04.01.2009, 17:09  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 6
Sword befindet sich auf einem aufstrebenden Ast
Standard

ok... das funktioniert zwar, jedoch wird auch weiterhin überall ein / angehangen^^

das ist doch hinderlich, da es doch recht viele Internetaddressen unbrauchbar macht^^
Sword ist offline  
Alt 04.01.2009, 17:21  
lutoma
Gast
 
Beiträge: n/a
Standard

PHP-Code:
$string substr($string0, -1); 
Das sollte das / abschneiden
 
Alt 04.01.2009, 17:33  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 6
Sword befindet sich auf einem aufstrebenden Ast
Standard

ok...
ähm...
vielleicht hab ich was falsch verstanden... aber mein aktueller Code sieht so aus:
PHP-Code:
$text ereg_replace("&","&amp;",$text);
$text preg_replace("/\[b\](.*)\[\/b\]/Usi""<b>\\1</b>"$text);
$text preg_replace("/\[i\](.*)\[\/i\]/Usi""<i>\\1</i>"$text);
$text preg_replace("/\[u\](.*)\[\/u\]/Usi""<u>\\1</u>"$text);
$text preg_replace("/\[color=(.*)\](.*)\[\/color\]/Usi""<font color=\"\\1\">\\2</font>"$text);
$text preg_replace("/\[email=(.*)\](.*)\[\/email\]/Usi""<a href=\"mailto:\\1\">\\2</a>"$text);
$text preg_replace("/\[img\](.*)\[\/img\]/Usi""<img src=\"\\1\">"$text);
$pattern '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
$text preg_replace($pattern,"\\1<a href=\"\\2\\3\"><u>\\2\\3</u></a>\\4",$text);
$text preg_replace("/\[url\]www.(.*)\[\/url\]/iUms","<a href=\"http://www.\\1\">[url]http://www.\\1[/url]</a>",$text);
$text preg_replace("/\[url\](.*)\[\/url\]/iUms","<a href=\"\\1\">\\1</a>",$text);
$text preg_replace("/\[url=(.*)\](.*)\[\/url\]/iUms","<a href=\"\\1\">\\2</a>",$text); 
wo soll ich da deine Antwort einfügen?
Sword ist offline  
Alt 04.01.2009, 17:35  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Lass Dir doch einfach mal nach jeder einzelnen Ersetzung $text ausgeben.

btw: ereg_replace() wird nicht mehr empfohlen, siehe pcre
David ist offline  
Alt 04.01.2009, 18:45  
Neuer Benutzer
 
Registriert seit: 04.01.2009
Beiträge: 6
Sword befindet sich auf einem aufstrebenden Ast
Standard

interessant... warum wird das eine empfholen und das andere nicht?
beides macht doch, was es soll^^

oder ist das ereg lediglich veraltet und es besteht die Gefar, dass es bald nicht mehr unterstützt wird?
(habe hinter deinem Link keine Informationen über das "warum" gefunden)

anscheinend funktioniert es jetzt...
wahrscheinlich habe ich nach dem obigen Umdrehen einen fehlerhaft eingetragenen Datensatz überprüft...

Geändert von Sword (04.01.2009 um 18:55 Uhr).
Sword ist offline  
Alt 06.01.2009, 19:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Tip: preg_replace(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg_replace().
Zitat:
Tip: PHP also supports regular expressions using a Perl-compatible syntax using the PCRE functions. Those functions support non-greedy matching, assertions, conditional subpatterns, and a number of other features not supported by the POSIX-extended regular expression syntax.
Zitat:
These regular expression functions are not binary-safe. The PCRE functions are.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
 


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
Links vom Untermenü in Container öffnen Surfer PHP Tipps 2008 0 27.12.2008 19:24
Scriptsuche Script das Links überprüft und offline Links löscht nitramf Scriptbörse 0 24.11.2008 16:05
Anzeige der Untermenüpunkte (Links) Jen PHP Tipps 2008 4 18.08.2008 21:41
Links im Text GELight PHP Tipps 2006 3 13.10.2006 17:35
Darstellung von Links ohne Parameter seven-12 PHP Tipps 2006 4 16.02.2006 15:31
Ueberlagerte Links HTML, Usability und Barrierefreiheit 0 01.10.2005 19:44
[Erledigt] Links hinter Div-Layer funktionieren nicht HTML, Usability und Barrierefreiheit 10 14.09.2005 15:39
Tabelle ganz links lalala HTML, Usability und Barrierefreiheit 1 06.07.2005 14:29
Links mit verschiedenen Inhalten und extra Fenster HTML, Usability und Barrierefreiheit 6 27.04.2005 22:23
Zentrale Verwaltung interner Links Malfunction PHP Tipps 2005 4 01.03.2005 13:30
Links sortieren Simon9990 PHP Tipps 2005 5 28.01.2005 23:03
Variablen und Links PHP Tipps 2005 13 19.01.2005 16:45
Session-ID auto-ergänzung von Links ausschalten? PHP Tipps 2004 3 10.08.2004 16:39
links wie z.B index.php?action=news aircrash PHP Tipps 2004 5 27.07.2004 21:35

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_replace links, preg_replace links umwandeln, preg_replace links ändern, php preg_replace url, preg_replace außer links, php preg_replace urls with link, php preg_replace links umwandeln, preg_replace link, php center div preg_replace, mit preg_replace links verändern, php $_post preg_replace, preg_replace keine links, preg_replace href, http://www.php.de/php-einsteiger/50287-erledigt-preg_replace-aendert-links.html, preg_replace url, email umwandeln mit preg_replace, php pregreplace urls to links, perl regex a href zu url umwandeln, php pre_replace link ändern, php url mit regex ändern

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:04 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