Backslash Problem bei PHP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgeschlossene bereiche
bereich
code
dankbar beitrag
ergebnis
ersetzen
folgendes kleines problem
glossar
header
hilfe
index
nachlesen
not
ordern
post
problem
string
support
type
-
Hallo User,
ich habe das Glossar für Redaxo, nur habe ich jetzt ein Problem:
Code:
<?php function rex_glossar_replace($params) { global $REX, $mypage, $I18N_GLOSSAR; $string = $params[\'subject\']; // Aufteilen des Strings, damit nur im Body ersetzt wird $bodystart = strpos($string, \'<p>\'); $header = substr($string, 0, $bodystart); $body = substr($string, $bodystart); // Bereiche ersetzen, in denen keine Glossar ersetzungen durchgeführt werden sollen // welche nicht innerhalb des Tags sind $back_srch = array (); $back_rplc = array (); $mtchs = array (); if (preg_match_all(\'/(<textarea.*?>(.*?)<\\/textarea>)/s\', $body, $mtchs)) { foreach ($mtchs[2] as $key => $mtch) { $back_srch[$key] = \'###SPACER###\' . $key . \'###\'; $back_rplc[$key] = $mtch; $body = str_replace($mtch, \'###SPACER###\' . $key . \'###\', $body); } } $sql = new sql; //$sql->debugsql = true; $sql->setQuery(\'SELECT * FROM rex_13_glossar, rex_13_glossar_lang WHERE language = lang_id ORDER BY CHAR_LENGTH(shortcut) DESC\'); // IE doesnt support <abbr> if (strpos($_SERVER[\'HTTP_USER_AGENT\'], \'MSIE\')) { $replacetag = \'acronym\'; } else { $replacetag = \'abbr\'; } $replaceformat = \'<\' . $replacetag . \' class=\\\"abbr\\\" title=\\\"%desc% (%lang%)\\\">%short%</\' . $replacetag . \'>\'; $searches = array (); $replaces = array (); for ($i = 0; $i < $sql->getRows(); $i++) { $language = htmlspecialchars($sql->getValue(\'lang_name\')); $shortcut = htmlspecialchars($sql->getValue(\'shortcut\')); $description = htmlspecialchars($sql->getValue(\'description\')); $casesense = $sql->getValue(\'casesense\'); // Escape Shortcut for preg_match $escapedshortcut = preg_quote($shortcut, \'/\'); $escapedentitiesshortuct = htmlentities($escapedshortcut); if($escapedentitiesshortuct == $escapedshortcut) $search = \'/((<[^>]*)|\' . $escapedshortcut . \')/e\'; else $search = \'/((<[^>]*)|\' . $escapedshortcut . \'|\'. $escapedentitiesshortuct .\')/e\'; $replacer = _rex_glossar_parse_replace_format($replaceformat, array ( \'lang\' => $language, \'desc\' => $description, \'short\' => $shortcut )); $replace = \'\"\\2\"==\"\\1\" && strpos( \"\\1\", \"<\' . $replacetag . \'>\") === false ? \"\\1\":\"\' . $replacer . \'\"\'; if ($casesense == 0) { $search .= \'i\'; } $searches[] = $search; $replaces[] = $replace; $sql->next(); } // Ersetzungen durchführen $body = stripslashes(preg_replace($searches, $replaces, $body)); // Vorher ausgeschlossene Bereiche wieder einpflegen $body = str_replace($back_srch, $back_rplc, $body); return $header . $body; } function _rex_glossar_parse_replace_format($replaceformat, $vars) { if (!is_array($vars)) { trigger_error(\'rexAddon[Glossar]: Unexpected type \"\' . gettype($vars) . \'\" for $vars. Expecting type Array!\'); } if (count($vars) == 0) { trigger_error(\'rexAddon[Glossar]: Array $vars must not be empty!\'); } foreach ($vars as $search => $replace) { $replaceformat = str_replace(\'%\' . $search . \'%\', $replace, $replaceformat); } return $replaceformat; } ?>
Das Script funktioniert auch, nur passiert folgendes kleines Problem:
Bsp:
location.href=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'index.php?article_id=14\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
Bei Hochkommas \' werden immer und überall zig Backslahes angehängt. Weiss jmd. wie das behoben werden kann? Für jede Hilfe bin ich dankbar
Beitrag geändert: 19.2.2008 11:42:05 von hirbod
Beitrag geändert: 19.2.2008 11:44:03 von hirbod -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Habs selbst gefixt:
Aus:
// Vorher ausgeschlossene Bereiche wieder einpflegen
$body = str_replace($back_srch, $back_rplc, $body);
hab ich:
// Vorher ausgeschlossene Bereiche wieder einpflegen
$body = str_replace($back_srch, $back_rplc, $body);
$body = str_replace(\'\\\\\', \'\', $body);
gemacht, und es geht wunderbar, läuft alles einwandfrei :) -
das kann man auch nachlesen!
-
das problem nennt sich magic quotes.
es gibt aber die variante
function PostVar($variablen_name)
$ergebnis = $_PQST[$variablen_name]:
if (get_magic_quotes_gpc())
$ergebrnis = strips1ashes($ergebnis);
return $ergebnis;
}
Was ist denn PQST, ist das die magic quote?
-
Sorry, das muss POST heißen.
hilfts dir? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage