[PHP] escape probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een site gebouwd met een stukje php erin dat een tekstbestandje inleest. Dit bestandje kan ik dan met een soort van backoffice wijzigen met een html form enzovoort. Het werkt prima ik kan html tags meegeven etc. Maar het zodra ik "quotes gebruik" gaat ie die natuurlijk escapen. Ik heb al geprobeerd om met htmlentities de zaak om te zetten maar dat helpt ook niet ik krijg dan gewoon de html notatie van alle " ' > < tekens maar hij escaped de quotes evengoed. Kan dit eigenlijk wel, wat ik wil?

schrijven:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?

  if ($_GET['action']=='write') {
    $file=fopen('test.txt','w+');
    $message=str_replace("\'","'",$message);
    $message=str_replace("\"",""",$message);
    $message=str_replace("\r",'',$message);
    $message=str_replace("\n",'<BR>',$_GET['message']);
    fwrite($file,$message);
    fclose($file);
  }

?>


edit schermpie
PHP:
1
2
3
4
5
6
7
<?
    $edittext = file_get_contents("test.html");
    $edittext = str_replace("<BR>",'',$edittext);
    echo "<textarea name=message cols=38 rows=14>\n";
    echo $edittext;
    echo "</textarea>";
?>


de eerste str_replace werkt als ' vervang door blah, maar als ik de apostroph laat staan wordt ie alsnog bij het replacen geescaped.

Is er iemand met een goeie tip?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik begrijp dus dat je aan de hand van een php pagina een .html file wilt maken oid ?

Acties:
  • 0 Henk 'm!

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 20:50

Pelle

🚴‍♂️

* Pelle ziet 'PHP'
* Pelle gooit naar de buren

curry684, vang :*

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
jup ik heb een andere zeg maar "frontoffice" php die die tekst file inleest en in een frame laat zien van de site, werkt prima op de quotes na dan

zo:
PHP:
1
2
3
4
<? 
       $txt = file_get_contents("contactinfo.txt"); 
       echo $txt;
   ?>

[ Voor 29% gewijzigd door Verwijderd op 08-04-2004 14:59 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ik heb zo'n soort gelijk iets gemaakt ooit, en kwam hetzelfde probleem tegen.
Wat ik toen gedaan heb is de hele tekst die de uiteindelijke "nieuwe" pagina moet gaan vormen eerst in een database gezet, en het toen in die nieuw page als string weer uitgehaald...dan kijkt ie niet naar de qoutes e.d.
Maar ik weet niet of jij een database tot je beschikking hebt...anders zou ik er ook even over na moeten denken...je moet dus zien te omzeilen dat ie naar de "" en '' en <> enz enz gaat kijken...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nope heb helaas geen db ter beschikking,
het gekke is eigenlijk dat tags <b> blah</b> enzo wel gewoon werken.
de tekst die gepost wordt wordt letterlijk in de .txt of .html file gezet en klopt dus gewoon. zelfs " ' " enkele quotes pakt ie want als ik \' replace met koeitjeboeh pikt ie dat gewoon.
double qoutes werkt dit (natuurlijk) niet omdat ie bij de eerste "\"" double quote al denkt dat het is afgelopen.....
tot zover ben ik gekomen.... :?

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
een slash moet je ook escapen, dus \\"
De 2e str replace moet natuurlijk '"' zijn i.p.v. """

Acties:
  • 0 Henk 'm!

Verwijderd

Tsjah, ik weet het ook even niet...wel een puntje om over na te denken....ik hoop dat anderen wel een oplossing hebben voor je ??

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
stekkel schreef op 08 april 2004 @ 15:17:
een slash moet je ook escapen, dus \\"
De 2e str replace moet natuurlijk '"' zijn i.p.v. """
hmm, als ik dat doe krijg ik een parse error vanwege die extra escape
maar zelfs als dit mocht werken blijf ik met het probleemzitten dat ie de 2e str replace óók escaped en dus \' vervangt met een geescapedte ' ==> \'
dat lukt dus niet, jammer genoeg..... ik word er gek van....
kan dit misschien niet zonder database?

[ Voor 15% gewijzigd door Verwijderd op 08-04-2004 15:32 ]


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

1) Je gebruikt geen database
2) Dit heeft niks met databases te maken
3) Lees je code door er staan gewoon fouten in

[ Voor 9% gewijzigd door mulder op 08-04-2004 15:47 ]

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Don Facundo schreef op 08 april 2004 @ 15:46:
1) Je gebruikt geen database
2) Dit heeft niks met databases te maken
3) Lees je code door er staan gewoon fouten in
Het is ook vooral NIET de bedoeling om een database te gebruiken......
ik zie dat in de 3e en 4e str_replace de escapes zijn weggevallen voor de r en n, hier zit het probleem ook niet dit werkt namelijk voortreffelijk.

als je naast die twee dingen fouten ziet zou je me dan kunnen zeggen wàt er dan fout is misschien komen we dan zo tot een oplossing,
toch bedankt!

Acties:
  • 0 Henk 'm!

  • Billie
  • Registratie: Januari 2003
  • Laatst online: 16-09 20:27
Jij hebt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?

  if ($_GET['action']=='write') {
    $file=fopen('test.txt','w+');
    $message=str_replace("\'","'",$message);
    $message=str_replace("\"",""",$message);
    $message=str_replace("r",'',$message);
    $message=str_replace("n",'<BR>',$_GET['message']);
    fwrite($file,$message);
    fclose($file);
  }

?> 


Volgens de highlighter klopt er iets dus niet. :P

Wat ik zou doen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?

  if ($_GET['action']=='write') {
    $file=fopen('test.txt','w+');
    $message=str_replace("\'","'",$message);
    $message=str_replace("\"",'"',$message);
    $message=str_replace("r",'',$message);
    $message=str_replace("n",'<BR>',$_GET['message']);
    fwrite($file,$message);
    fclose($file);
  }

?> 

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hmmmh billy,
ziet er idd. beter uit maar het helpt niet...
om de zaak even te scheiden heb ik m als volgt in gevoerd
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<? 

  if ($_GET['action']=='write') { 
    $file=fopen('test.txt','w+'); 
    $message=str_replace("\'","tjakka",$message); 
    $message=str_replace("\"",'boem',$message); 
    $message=str_replace("\r",'',$message); 
    $message=str_replace("\n",'<BR>',$_GET['message']); 
    fwrite($file,$message); 
    fclose($file); 
  } 

?> 


check:
http://stuwww.uvt.nl/~s407380/DEVELOPMENT/test.php
om te zien wat er gebeurt.

hij zou dus tjakka boem moeten geven als er " ' ingevoerd wordt, maar ik krijg gewoon \" \' te zien helaas......

[ Voor 16% gewijzigd door Verwijderd op 08-04-2004 16:09 ]


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

Misschien helpt het om de eerste replace op $_GET['message'] te doen en alle andere op $message :/. Het word dan zoiets:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<? 
  if ($_GET['action']=='write') { 
    $file=fopen('test.txt','w+'); 
    $message=str_replace("\'","'",$_GET['message']); 
    $message=str_replace("\"",'"',$message); 
    $message=str_replace("\r",'',$message); 
    $message=str_replace("\n",'<BR>',$message); 
    fwrite($file,$message); 
    fclose($file); 
  } 
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
kee heb het getest wormlord..
maar als ik dat doe dan lijken de andere str_replaces niet meer te werken....
hij herkent geen enters meer bijvoorbeeld, terwijl het \'' probleem blijft bestaan.

Ik kreeg nog een ander ideetje. Namelijk als je de functie stripslashes() gebruikt nadat ie str_replace("\n","<br>",$message) en die met "\r" hebt staan. Dan zou (in theorie althans) in $message geen \n en geen \r meer mogen staan, (die zijn immers gereplaced) als ik dan alle backslashes met stripslashes() eruithaal moet ik een file krijgen zonder een enkele escape!


dit is dan de code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<? 

  if ($_GET['action']=='write') { 
    $file=fopen('test.txt','w+'); 
    $message=str_replace("\r",'',$message); 
    $message=str_replace("\n",'<BR>',$message); 
    $message=stripslashes($_GET['message']);
    fwrite($file,$message); 
    fclose($file); 
  } 

?> 


Ik heb m getest en...... HIJ WERKT!!!!!!
http://stuwww.uvt.nl/~s407380/DEVELOPMENT/test.php

mensen bedankt voor het meedenken!!

[ Voor 37% gewijzigd door Verwijderd op 09-04-2004 15:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
sorry wormlord
jouw tip is logisch èn nodig om het geheel goed te laten werken
om alles goed te laten werken moet je natuurlijk eerst de input ophalen en m dan bewerken....

de code ziet er nu als volgt uit:

schrijven:
alle enters "\n" worden <BR> en iedere \n die overblijft in het tekst bestand is mooi te gebruiken voor list() voor in een gastenboekie. Het tekst bestand ziet er overzichtelijk uit enzovoort

lezen:
om in het tekst venster de tekst weer op te halen zonder <BR> maar met \n (opdat je tekst weer mooi gestructureerd in je input venster verschijnt), moet je <BR> weer replacen met \n

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<? 

  if ($_GET['action']=='write') { 
    $file=fopen('test.txt','w+'); 
    $message=str_replace("\r",'',$_GET['message']); 
    $message=str_replace("\n",'<BR>',$message); 
    $message=stripslashes($message);
    fwrite($file,$message); 
    fclose($file); 
  } 

?> 


<form action="test.php" method="GET" onSubmit="return validate(this);">
<input type="hidden" name="action" value="write">


    <?
    $edittext = file_get_contents("test.txt");
    $edittext = str_replace("<BR>","\n",$edittext);
    echo "<textarea name=message cols=38 rows=14>\n";
    echo $edittext;
    echo "</textarea>";
    ?>

<input name="submit" type="submit" value="Verstuur">


zo hehe nu doet ie pcies wat ik wil, ik hoop dat iemand dr ook nog wat aan heeft
Pagina: 1