![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() 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. |
![]() |
![]() |
![]() |
#2 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() 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 |
![]() |
![]() |
![]() |
#3 |
Trashtroll
![]() |
![]() 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 ... |
![]() |
![]() |
![]() |
#4 |
Inventar
![]() |
![]() Den String mit htmlentities codieren (z.B. für die DB), mit html_entity_decode decodieren, näheres hier: http://at2.php.net/htmlentities
|
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() 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¶m2=$ 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). |
![]() |
![]() |
![]() |
#6 |
Trashtroll
![]() |
![]() 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 "<br>" 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')); |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() |
![]() Ist zwar nur eine Kleinigkeit aber ein nl2br($code) tut dasselbe wie dein str_replace(...)
![]() ![]() 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 |
![]() |
![]() |
![]() |
#8 |
Master
![]() Registriert seit: 13.08.2003
Beiträge: 624
|
![]() 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:
Geändert von T.dot (09.01.2009 um 19:11 Uhr). |
![]() |
![]() |
![]() |
#9 |
Inventar
![]() Registriert seit: 06.04.2001
Alter: 44
Beiträge: 2.343
|
![]() 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. |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|