[PHP] Dubbele \\ verwijderen of voorkomen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 11-09 08:41
HoI! :)

Ik heb het volgende probleem:

Wanneer ik gegevens haal van het ene naar het andere PHP document
(via een formulier) dan krijg ik bij een "\" een dubbele "'\" -> "\\" dus..
(C:\root\test.gif wordt c:\\root\\test.gif)

Ik heb al in de faq gekeken en ik weet niet of het hier mee te maken heeft, maar is
dit zo'n vraag die "in" is ? ;)

In de FAQ staat dat ik voor variabelen die met een formulier meekomen
$_GET moet gebruiken.... en voor bestanden $_FILES, maar ik upload meerdere bestanden en dit is maar 1 variabele, hoe los ik dit op?
Ik kom er niet uit via de URL's die in de FAQ staan

Ik ben vrij nieuw in PHP (3 dagen) en weet dus niet precies hoe ik dit moet oplossen.

Als iemand mij hierbij zou kunnen helpen ben ik erg blij! :+
alvast bedankt! _/-\o_

Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 17-09 20:43
heeft dat niet met addslashes(); en removeslashes(); te maken?
Zoek maar ff op in de PHP Manual.

Acties:
  • 0 Henk 'm!

Verwijderd

zoeken op "replace" in www.php.net en je kunt van "\\" "\" maken.

Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
RedHat schreef op 20 March 2003 @ 22:11:
heeft dat niet met addslashes(); en removeslashes(); te maken?
Zoek maar ff op in de PHP Manual.
addslashes en stripslashes
mits dat magic_quotes in de php config staat

Icons are overrated


Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 11-09 08:41
hoe kan ik controleren of dat magic_quotes in de PHP config staat? het werkt namelijk niet bij mij.. :-(
Ik zit bij DeHeeg, iemand daar ervaring mee?

Acties:
  • 0 Henk 'm!

Verwijderd

Rixard schreef op 20 March 2003 @ 23:37:
hoe kan ik controleren of dat magic_quotes in de PHP config staat? het werkt namelijk niet bij mij.. :-(
Ik zit bij DeHeeg, iemand daar ervaring mee?
naam ken ik wel ja, hoe en wat weet ik niet.

mischien:
PHP:
1
2
$text = str_replace("\\","\",$text);
//goh nou zeg ik het voor :P

Acties:
  • 0 Henk 'm!

Verwijderd

Niks mis met een dubbele \\ , dat is juist het escape mechanisme, anders weet php
niet dat er een enkele backslash bedoeld wordt. Want wat zou zonder escape de betekenis zijn van \\n? \n of een \ met newline...

Acties:
  • 0 Henk 'm!

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 08:29
Verwijderd schreef op 20 March 2003 @ 23:40:
[...]

naam ken ik wel ja, hoe en wat weet ik niet.

mischien:
PHP:
1
2
$text = str_replace("\\\\","\\",$text);
//je moet wel alles escapen :)

Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 11-09 08:41
dat werkt niet :-P daar was ik al achter.. want het aanhalings teken na de backslash wordt nu letterlijk overgenomen.. :-( maar toch bedankt voor het proberen :-)

Acties:
  • 0 Henk 'm!

Verwijderd

jongens er is niks mis met \\, net zoals \n slechts één karakter (newline), \t (tab) etc. is,
is \\ ook slechts één backslash. Zoiets noemt men escape mechanisme omdat door het escape karakter (\) door het volgende karakter het werkelijk bedoelde karakter wordt gecodeerd.

Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 11-09 08:41
maar als je het in een database wilt gooien is het wel verdomd handig om die "extra" backslashes te verwijderen, maar met het laatste voorbeeld van Eskimootje is het gelukt!!
ontzettend bedankt! _/-\o_ :*)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Rixard schreef op 21 March 2003 @ 00:19:
maar als je het in een database wilt gooien is het wel verdomd handig om die "extra" backslashes te verwijderen, maar met het laatste voorbeeld van Eskimootje is het gelukt!!
ontzettend bedankt! _/-\o_ :*)


onzin, juist als je het in de database wilt gooien wil je die slashes erin hebben, omdat de database driver die slashes ook weer omzet

als jij letterlijk een \ met een n erachter in je database wilt hebben kun je geen \n opgeven, want dan maakt ie er heel leuk een newline char van. \\n is dan de oplossing.
Verwijderd schreef op 20 March 2003 @ 22:11:
zoeken op "replace" in www.php.net en je kunt van "\\" "\" maken.
Verwijderd schreef op 20 March 2003 @ 23:40:
[...]

naam ken ik wel ja, hoe en wat weet ik niet.

mischien:
PHP:
1
2
$text = str_replace("\\","\",$text);
//goh nou zeg ik het voor :P
die replace functies zijn erg fout, daar ze alleen de \\ omzetten, en niet alle andere ge-escapte chars. Gebruik daarvoor stripslashes (), die functie is er niet voor niets

.edit: M4rt1nvW: die bedoel ik idd :*

[ Voor 4% gewijzigd door .oisyn op 21-03-2003 11:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • martinvw
  • Registratie: Februari 2002
  • Laatst online: 20-08 20:35
ahum:
stripslashes

Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 11-09 08:41
En stripslashes werkt niet overal ;) en het ging mij -alleen- om de dubbele slashes.
Bovendien is het voor mij wel handig om geen extra slahes in een database te hebben, want wanneer ik de datase uitlees hoef ik niet alsnog extra slashes te verwijderen.

Acties:
  • 0 Henk 'm!

Verwijderd

Dit is wat ik gebruik:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set_magic_quotes_runtime(0);

if (get_magic_quotes_gpc ()) {
  array_stripslashes($_POST);
  array_stripslashes($_GET);
  array_stripslashes($_COOKIES);
}


function stripslashes_array(&$array) {
  while (list($key) = each($array)) {
    if (is_array($array[$key])) {
      stripslashes_array($array[$key]);
    } else {
      $array[$key] = stripslashes($array[$key]);
    }
  }
}

Acties:
  • 0 Henk 'm!

  • irondog
  • Registratie: Januari 2001
  • Laatst online: 11-05 10:49

irondog

alle dingen moeten onzin zijn

Je kunt in php bij het gebruiken van bestanden gewoon forward slashes gebruiken.

Ff een loos voorbeeld dat zowel op unix als op windows goed werkt.
code:
1
2
3
4
5
6
$DOCUMENTROOT=$_SERVER['DOCUMENT_ROOT'];

if (substr($DOCUMENTROOT, 0, 1) != '/')
{
    $DOCUMENTROOT = strstr($DOCUMENTROOT,'/');
}


Als apache iets aangeeft als c:/apache/htdocs/ dan wordt "c:" weggehaald en blijft /apache/htdocs over. Oftewel: je php code is dan niet meer platform afhankelijk.

En natuurlijk herkent php het path naar een bestand met forward slashes.
code:
1
<? include('./includes/blaaat.php'); ?>

[ Voor 18% gewijzigd door irondog op 21-03-2003 12:04 ]

[P5B deluxe] [Core2Duo 6300] [2 X 1GB DDR2] [GF FX7300] [320 GB WD] [Gentoo] [VISTA]


Acties:
  • 0 Henk 'm!

Verwijderd

Rixard schreef op 20 maart 2003 @ 22:09:
In de FAQ staat dat ik voor variabelen die met een formulier meekomen
$_GET moet gebruiken.... en voor bestanden $_FILES, maar ik upload meerdere bestanden en dit is maar 1 variabele, hoe los ik dit op?
Ik kom er niet uit via de URL's die in de FAQ staan
$_GET en $_FILES (en soortgelijke variabelen) zijn arrays. Doe eens print_r($_GET) om erachter te komen wat erin zit.
Pagina: 1