[php] addslashes maar dan anders?

Pagina: 1
Acties:

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Ik moet een lange string opslaan in een include-file, en die string kan natuurlijk quotes en slashes bevatten, maar dat gaat toch niet helemaal goed met addslashes: er wordt te veel geëscaped.
Ik heb nu de volgende code, die werkt maar is ernstig inefficient:
PHP:
1
2
3
4
5
6
<?
$fp = fopen("$tempdir/menu.php","w");
fwrite($fp,"<? \$menustring = \"". urlencode(serialize($obj)). "\";\n\n") ;
fwrite($fp,'$menuroot = unserialize(urldecode($menustring)); ?>') ;
fclose($fp);
?>

Liefst heb ik iets in de trend van:
PHP:
1
2
3
4
5
<?
$fp = fopen("$tempdir/menu.php","w");
fwrite($fp,'<? $menuroot = unserialize("'. ESCAPE_FUNCTIE(serialize($obj)). '"); ?>') ;
fclose($fp);
?>

Bestaat er een versie van addslashes die dit netjes afhandelt? (en dus o.a. " niet esceept...)

Localhost, sweet localhost


Verwijderd

zover ik weet niet, die zul je zelf moeten schrijven:
PHP:
1
2
3
4
5
<?
function add_some_slashes($code){
    ... // je addslashes code
}
?>

maar wat is er zo erg aan als alles wordt geescaped? daar hebben ze stripslashes toch voor uitgevonde?

  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
Wat bedoel je met "te veel ge-escaped"? Helderziendheid is vooralsnog niet mijn sterkste punt.

Ik spoor veilig of ik spoor niet.


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Op vrijdag 22 februari 2002 12:50 schreef Anders het volgende:
Wat bedoel je met "te veel ge-escaped"? Helderziendheid is vooralsnog niet mijn sterkste punt.
Op vrijdag 22 februari 2002 12:22 schreef kvdveer het volgende:
Bestaat er een versie van addslashes die dit netjes afhandelt? (en dus o.a. " niet esceept...)
---


Welke tekens kunnen er allemaal niet tussen enkele quotes?
Dubbelquote in ieder geval wel. Enkelquote uiteraard niet, backslash niet, newline wel, null niet, wat nog meer?

Localhost, sweet localhost


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

* Janoz gokt maar een beetje, want ziet het probleem niet echt in......

Werkt dit niet?
PHP:
1
2
3
4
5
<?
$fp = fopen("$tempdir/menu.php","w");
fwrite($fp,'<? $menuroot = unserialize("'. addslashes(serialize($obj)). '"); ?>') ;
fclose($fp);
?>

Als je er niet uit komt... Probeer dan gewoon eens op te schrijven wat je wilt, en kijk hoe je dit met verschillende escape functies voor elkaar kunt krijgen....

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
voorbeeldje:
PHP:
1
2
3
4
5
6
<?
echo '$menustring = "'.  addslashes("een string met een \"dubbelquote\""). '";';
echo '$menustring = "'.  addslashes("een string met een 'enkelquote'").    '";';
echo '$menustring = \''. addslashes("een string met een \"dubbelquote\""). '\';';
echo '$menustring = \''. addslashes("een string met een 'enkelquote'").    '\';';
?>

==|>
code:
1
2
3
4
$menustring = "een string met een \"dubbelquote\"";  << GOED!
$menustring = "een string met een \'enkelquote\'";  << FOUT!
$menustring = 'een string met een \"dubbelquote\"';  << FOUT!
$menustring = 'een string met een \'enkelquote\'';  << GOED!

van de bovenstaande code kan ik geen goede functie produceren...

Localhost, sweet localhost


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op vrijdag 22 februari 2002 13:37 schreef kvdveer het voorbeeldje:
Mag ik ff vragen of je Uberhaupt hebt GEPROBEERT of het werkelijk goed of fout is??

Als je dat namelijk had gedaan, dan had je gezien dat ALLE van de bovenstaande voorbeelden juist zouden werken!

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RikY
  • Registratie: Januari 2000
  • Laatst online: 11-09 08:46
addcslashes()

kun je aangeven welke tekens wel en niet geescaped moeten worden.

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Op vrijdag 22 februari 2002 13:40 schreef Janoz het volgende:

[..]

Mag ik ff vragen of je Uberhaupt hebt GEPROBEERT of het werkelijk goed of fout is??

Als je dat namelijk had gedaan, dan had je gezien dat ALLE van de bovenstaande voorbeelden juist zouden werken!
Het zijn inderdaad wat slecht gekozen voorbeelden, maar ik heb hier inderdaad nietwerkende code liggen. Ik kan het echter niet posten, omdat het noggal groot is. Ik probeerde met de bovenstaande code alleen maar het soort probleem aan te geven wat ik tegenkwam.
Ik zal nog even precies opzoeken welk karakter de oorzaak was van deze problemen...
Liefst moet het nog binary-safe zijn... maar voorlopig lijkt me dat te veel gevraagd.

Localhost, sweet localhost


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025
Ik heb de dader gevonden:

Ik had in een string de volgende inhoud: "Collega\'s". MET die backslask (dat is geen escape)
Dat had geësceepd moeten worden als "Collega\\\'s", maar werd in het geheel niet geesceept. Dat was fout, want dan wordt je string 1 karakter korter, en daar struikelt unserialize over. (overigens zonder melding. Dat is jammer).

Ik heb mijn code nu werkend door die string aan te passen, maar ik denk dat ik straks eerst met addcslashes eens de slashes ga escapen ,waarna addslashes niet meer in de war zou moeten raken...

Localhost, sweet localhost

Pagina: 1