Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe Ostern!

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Str_replace, preg_replace Problem
#1
Hey Leute,

ich hoffe, ihr könnt mir hier helfen.

Also. Ich habe eine Seite seite.php erstellt. Hier lade ich ein Template, das den kompletten Inhalt ÜBER dem Inhalt in seite.php enthält. Entsprechend lade ich noch ein Template, welches den kompletten Inhalt UNTER dem eigentlichen Inhalt von seite.php enthält.
Nun habe ich im Admin CP in ein Template ///navigation/// eingefügt. Nun habe ich ja das fertig ersetzte Template in einer Variable ($overcontent) gespeichert und möchte dort per preg_replace "///navigation///" durch "Hier kommt später die Navigation hin" austauschen.
Allerdings funktioniert dann nichts mehr, keines der beiden Templates wird angezeigt und ich habe nur noch den reinen Inhalt von seite.php.
Wenn ich nicht versuche, "///navigation///" austauschen zu lassen, wird aber ganz normal geladen.

Überhaupt habe ich das Problem, ich kann in keinem fertig zusammengesetzten Template irgendetwas austauschen und ersetzen. Z.B. Umlaute oder sowas. Es wird nicht gemeldet, dass die Funktion nicht funktioniert hätte, sondern das, was eigentlich ausgetauscht werden sollte, bleibt genauso, wie es war. Irgendwie verwirrt mich das.

Ist sowas also überhaupt möglich und wenn ja, wie?

Ich hoffe, irgendwer hat mich hier verstanden. ^^
Zitieren
#2
Ich bau mir bei sowas immer Debugmeldungen ein und schau, was genau der Funktion wirklich gegeben wird und was sie zurückliefert. Meistens merkt man dann recht schnell den Fehler oder kann durch ausprobieren in einer interaktiven PHP Shell herausfinden warums nicht klappt.
Zitieren
#3
Danke schonmal für die Antwort.
Ich habe das auch schon immer wieder versucht, aber irgendwie wird das nichts.

Was ich auch sehr merkwürdig finde:

str_replace("a", "ä", $string);

funktioniert.

str_replace("ä", "ä", $string);

will partout nicht funktionieren.


Jedenfalls nützen mir die Debugmeldungen auch nichts. Es gibt keinen Hinweis darauf, dass die Funktion nicht erkannt oder nicht verwendet wurde. Nur irgendwie funktioniert sie trotzdem nicht...
Zitieren
#4
Wie lautet denn dein gesamter Code?
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
Um da drauf antworten zu können müsste man halt wissen was denn in $string nun gerade drin steht, gerade bei Umlauten kann man da noch Zeichensatzprobleme bekommen, str_replace wird z.B. kein UTF-8 ä ersetzen wenn nach einem ISO-8859-1 ä gesucht wurde.
Zitieren
#6
PHP-Code:
<?php
define
("IN_MYBB"1);
//define("NO_ONLINE", 1); // Wenn Seite nicht in Wer ist online-Liste auftauchen soll

require("global.php");

eval(
"\$overcontent = \"".$templates->get("overcontent")."\";"); // Hier wird alles über dem Inhalt geladen
eval("\$undercontent = \"".$templates->get("undercontent")."\";"); // Hier wird alles unter dem Inhalt geladen


$tabelle_textseiten "textseiten";

// Wir ermitteln, ob überhaupt eine Seite existiert, die geladen werden könnnte.
if (!empty($_GET["seite"]))
{
  
$seite $_GET["seite"];
  
$sql_exist "SELECT * FROM $tabelle_textseiten WHERE name='$seite'";
  
$res_exist mysql_query($sql_exist);
  
$anz_exist mysql_num_rows($res_exist);
  if (
$anz_exist == 1)
  {
    
$seiteexistiert true;
    
$sql_seite "SELECT * FROM $tabelle_textseiten WHERE name='$seite'";
    
$res_seite mysql_query($sql_seite);
    
$arr_seite mysql_fetch_assoc($res_seite);
  }
  else
  {
    
$seiteexistiert false;
    
$sql_start "SELECT * FROM $tabelle_textseiten WHERE name='startseite'";
    
$res_start mysql_query($sql_start);
    
$arr_start mysql_fetch_assoc($res_start);
  }
}
else
{
  
$seiteexistiert false;
  
$sql_start "SELECT * FROM $tabelle_textseiten WHERE name='startseite'";
  
$res_start mysql_query($sql_start);
  
$arr_start mysql_fetch_assoc($res_start);  
}

$seite $overcontent;
$seite preg_replace("|///navigation///|""Navi"$seite);

// Wenn die angeforderte Seite existiert, wird sie angezeigt:
if ($seiteexistiert)
{
  
add_breadcrumb($arr_seite["heading"]);
  
$seite .= "<td class=\"thead\"><strong>$arr_seite[heading]</strong></td>\n</tr>\n<tr>\n<td class=\"trow1\">";
  
$seite .= $arr_seite["inhalt"];
}
// Wenn die angeforderte Seite nicht existiert oder gar keine angefordert wurde, wird die Startseite geladen.
if ($seiteexistiert == false)
{
  
add_breadcrumb("Startseite");
  
$seite .= "<td class=\"thead\"><strong>Startseite</strong></td>\n</tr>\n<tr>\n<td class=\"trow1\">";
  
$seite .= $arr_start["inhalt"];

$seite .= $undercontent;

output_page($seite);
?>

So. Und hier lässt sich ///navigation/// partout nicht durch irgendetwas anderes austauschen...

Die Beiden Templates sehen so aus:

Overcontent:

Code:
<html>
<head>
<title>{$settings['bbname']} - Impressum</title>
{$headerinclude}
</head>
<body>
{$header}
<table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder" style="margin-bottom: 20px;">
<tr>

Undercontent:

Code:
</td>
</tr>
</table>
{$footer}
</body>
</html>


Vielleicht weiß ja jemand jetzt mehr. ^^
Mir würde es sehr sehr helfen. =)



EDIT:

So, ich habe mir nun geholfen.
Ich bin in die inc/functions.php gegangen und habe dort einfach in der output_page() Funktion alles geändert, wie es sein soll.
Ich bedanke mich aber trotzdem sehr für eure Hilfe!
Zitieren
#7
Vorsicht, SQL Injection. Du willst $var = $db->escape_string($_GET...);
Zitieren
#8
Das sollte dann zumindest escaped sein wenn man GET / POST Variablen verarbeitet.

Siehe dazu: mysql_escape_string oder mysql_real_escape_string
Dies ist keine Rechtsberatung - kein Support außerhalb des Board
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Fatal error: preg_replace(): Ragb 1 1.489 07.05.2006, 08:19
Letzter Beitrag: Garlant