WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 08.01.2009, 15:41   #1
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard PHP: # escapen

ich übergebe an ein PHP-file einen string, in welchem sich u.a. ein # befindet.
dieses müßte vor der übergabe escaped werden, damit PHP alles danach nicht als kommentar interpretiert.

wie aber kann ich das machen, nachdem der HTML-code für # (&<hash>35; ) selbst wieder ein # enthält?
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Alt 08.01.2009, 17:33   #2
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Servus,

was meinst du mit "ich übergebe an ein PHP-file einen string"? Als Request-Parameter, als Post-Wert, beim Einlesen eines Files?

Kann mir schwer vorstellen, wo es Probleme gibt, wenn in einem String ein # enthalten ist ('# ist doch auch nur ein String'), hast du nen Codeschnippsel?

mfg
T.dot ist offline   Mit Zitat antworten
Alt 08.01.2009, 19:21   #3
ZombyKillah
Trashtroll
 
Benutzerbild von ZombyKillah
 
Registriert seit: 19.10.2008
Ort: far away but still in austria
Beiträge: 1.194

Mein Computer

Standard

Wenn ich das richtig verstehe, wilst du eine '#' löschen.
Verstehe den Grund zwar nicht ... aber ich gehe jetzt einmal davon aus, dass du versuchst mit pearl oder bash eine Zeile aus einer Datei an eine php script zu geben, der irgendwas damit machen soll.

Eine liste der String befehle:
http://selfphp.edis.at/funktionsuebe...html#str_split

Du könnest z.B.: explode verwenden und dann mit der Anzahl der Arrayelemente kontrollieren, wieviele # es gegeben hat und ob es am Anfang der Zeile stand.

$str_arr=explode("#",$string);
if (count($str_arr) > 1 && ($str_arr[0]=="")){
unset($str_arr[0]);
$new_string = join("#",$str_arr);
unset($str_arr);

Weitere befehle ...

}

Keine Ahnung, ob der Code jetzt geht, hab das aus dem Kopf geschrieben ...
Aber so ca. könnte es aussehen ...
Mögliche fehler:
-Kontrolle, ob vor dem "#" nichts steht ...
ZombyKillah ist offline   Mit Zitat antworten
Alt 08.01.2009, 22:41   #4
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Den String mit htmlentities codieren (z.B. für die DB), mit html_entity_decode decodieren, näheres hier: http://at2.php.net/htmlentities
reemrev ist offline   Mit Zitat antworten
Alt 09.01.2009, 12:23   #5
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

ok, hier mal etwas genauer, was ich genau tun möchte:

ich möchte ein stück code, das aus einer DB ausgelesen wird und u.a. kommentare enthält (welche mit # gekennzeichnet sind), auf einer seite korrekt und nicht durch PHP interpretiert darstellen.
das funktioniert auch wunderbar mit htmlentities($code, ENT_QUOTES, 'UTF-8')

das problem ist nun, daß sich auf dieser seite ein link zu einem anderen PHP-script befindet, der code soll mit document.location="bla.php?param1=$param1&param2=$ param2&..." als übergabeparameter entsprechend übergeben werden, um dort dann wiederum dargestellt zu werden.

an und für sich sollte das mit htmlentities wieder kein problem sein. nur wenn ich dann auf der zielseite den parameter ausgeben lasse, fehlen leerzeilen sowie alles, was nach dem ersten # ist (weils offenbar als kommentar interpretiert wird).

das mit den leerzeilen habe ich so hinbekommen (obwohl das eigentlich doch durch htmlentities erledigt werden sollte, ist aber komischerweise nicht so):

$param1 = htmlentities(str_replace("\n","<br>",$code), ENT_QUOTES, 'UTF-8');

bei den # stehe ich hingegen immer noch an.
natürlich könnte ichs auch einfach über str_replace("#","<HASH>",$str) machen und <HASH> dann vor der ausgabe wieder zurückwandeln, aber da muß es doch eine professionellere lösung geben.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.

Geändert von RaistlinMajere (09.01.2009 um 12:45 Uhr).
RaistlinMajere ist offline   Mit Zitat antworten
Alt 09.01.2009, 18:12   #6
ZombyKillah
Trashtroll
 
Benutzerbild von ZombyKillah
 
Registriert seit: 19.10.2008
Ort: far away but still in austria
Beiträge: 1.194

Mein Computer

Standard

Ich weiß nicht, wo du die Kommentare filterst, aber der htmlentities befehl wandelt nur alle Zeichen in html zeichen-code um.

So wird dein <br> auch in ein "&lt;br&gt;" umgewandelt, um die Symbole dann richtig darstellen zu können.

Nachdem du es aus einer DB ausließt, vermute ich, dass der Zeilenfilter bereits im query eingebaut ist oder seperat vorher behandelt wird.

Wilst du die Werte alle aus der DB auslesen und in den Link schreiben?
Oder steht z.B. in der Datenbank der Link mit allen Parameter in der gleichen Zeile?
Tschuldige, bin ein wenig verwirrt, weil du im Programmcode $param1 verwendest.
Ist dass eine ganze Zeile oder ist dass nur der $param1 vom Link?

Testcode:
$code = "#Zeile1 Kommentar
Zeile2 Programm
Zeile3 #";
echo htmlentities(str_replace("\n","<br>",$code), ENT_QUOTES, 'UTF-8');
echo str_replace("\n","<br>",htmlentities($code, ENT_QUOTES, 'UTF-8'));
ZombyKillah ist offline   Mit Zitat antworten
Alt 09.01.2009, 18:41   #7
zAPPEL
Inventar
 
Registriert seit: 07.11.2001
Ort: Perchtoldsdorf
Alter: 45
Beiträge: 2.085

Mein Computer

Standard

Ist zwar nur eine Kleinigkeit aber ein nl2br($code) tut dasselbe wie dein str_replace(...) Und das Problem ist mir auch nicht ganz klar

lg
____________________________________
„Das menschliche Gehirn ist eine großartige Sache.
Es funktioniert vom Moment der Geburt an – bis zu
dem Zeitpunkt, wo du aufstehst, um eine Rede zu halten.“ Mark Twain

"Windle shook his head sadly. Four exclamation marks, the sure sign of an insane mind" Reaper Man, Terry Pratchett
zAPPEL ist offline   Mit Zitat antworten
Alt 09.01.2009, 19:05   #8
T.dot
Master
 
Registriert seit: 13.08.2003
Beiträge: 624


Standard

Wärs nicht einfacher (falls möglich) den Wert, den du aus der Datenbank ausliest in eine Session-Variable zu geben und diese auf der nächsten Seite auszuwerten?
Dann sparst du dir das ganze escapen, ersetzten, usw.

edith:
Wenn du was per url-übergeben willst solltest du übrigens mit urlencode arbeiten.

PHP-Code:
<?php

if(isset($_REQUEST['param']))
{
    echo 
"param given: " urldecode($_REQUEST['param']);
}

$code "#Zeile1 Kommentar
Zeile2 Programm
Zeile3 #"
;

$url urlencode($code);

?>

<br /><br />
<a href="bla.php?param=<?php echo $url?>">klick</a>

Geändert von T.dot (09.01.2009 um 19:11 Uhr).
T.dot ist offline   Mit Zitat antworten
Alt 21.01.2009, 12:41   #9
RaistlinMajere
Inventar
 
Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343


Standard

danke für die hilfe, mit urlencode und decode hats geklappt.
____________________________________
"Life is like a box of rockets," said the Marine. "You never know what you´re gonna ret."
Then he pulled the trigger of his BFG9000.
RaistlinMajere ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:36 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag