Avatar billede hoppe11 Nybegynder
30. juni 2007 - 10:09 Der er 9 kommentarer og
1 løsning

stripslashes function

Jeg prøver på at lave en funktion som skal checke om en string indeholder espace slashes, men jeg oplever noget jeg ikke helt kan finde ud af..

Jeg har lavet nedenstående kode:

echo $str.'<br>';
echo '\' = '.count(explode('\'', $str));
echo '<br>';
echo '\\\' = '.count(explode('\\\'', $str));

echo '<br><br>';

$str = str_replace('\\\'', '', $str);
echo $str.'<br>';
echo '" = '.count(explode('"', $str));
echo '<br>';
echo '\" = '.count(explode('\"', $str));

echo '<br><br>';

$str = str_replace('\"', '', $str);
echo $str.'<br>';
echo '\\ = '.count(explode('\\', $str));
echo '<br>';
echo '\\\\ = '.count(explode('\\\\', $str));

echo '<br><br>';

$str = str_replace('\\\\', '', $str);

- som udskriver følgende:
hej \'du \"hehe \\dd
' = 2
\' = 2

hej du \"hehe \\dd
" = 2
\" = 2

hej du hehe \\dd
\ = 3
\\ = 2

hej du hehe dd

Hvorfor tæller den 3 ved \? Burde den ikke kun tælle 2?
Avatar billede hoppe11 Nybegynder
30. juni 2007 - 10:13 #1
eller spurgt på en anden måde.. hvordan kan man få den til at tælle "rigtigt"?
Avatar billede erikjacobsen Ekspert
30. juni 2007 - 10:18 #2
Du tæller ikke "\"-er med explode, men områderne omkring

  1\2\3

giver et array med 3 elementer, "1", "2", "3", og dermed en count på 3.
Avatar billede hoppe11 Nybegynder
30. juni 2007 - 10:34 #3
det ved jeg godt, men sådan lige den nemmeste måde jeg kunne se uden at rode sig ud i noget preg :)
Avatar billede erikjacobsen Ekspert
30. juni 2007 - 10:40 #4
Joh, måske ... Men du skal så bare trække én fra, for at få det rigtige tal.
Avatar billede erikjacobsen Ekspert
30. juni 2007 - 10:42 #5
Og ellers kunne man måske - afhængig af hvad du egentlig skal bruge det til - overveje http://php.net/substr_count
Avatar billede hoppe11 Nybegynder
01. juli 2007 - 11:01 #6
det var jo lige den funktion jeg skulle have fat i :)

hvordan er det så muligt at tilføje en NULL byte i min funktion? nu har jeg ', " og \

function str_stripslashes($str)
{
    $ref = $str;
    $strip = 0;
   
    if(substr_count($ref, '\''))
    {
        if(substr_count($ref, '\'') == substr_count($ref, '\\\''))
        {
            $ref = str_replace('\\\'', '', $ref);
            $strip = 1;
        }
        else $strip = 0;
    }
   
    if(substr_count($ref, '"'))
    {
        if(substr_count($ref, '"') == substr_count($ref, '\"'))
        {
            $ref = str_replace('\"', '', $ref);
            $strip = 1;
        }
        else $strip = 0;
    }
   
    if(substr_count($ref, '\\'))
    {
        if((substr_count($ref, '\\') / 2) == substr_count($ref, '\\\\'))
        {
            $ref = str_replace('\\\\', '', $ref);
            $strip = 1;
        }
        else $strip = 0;
    }
   
    if($strip) $str = stripslashes($str);
   
    return $str;
}
Avatar billede erikjacobsen Ekspert
01. juli 2007 - 11:02 #7
Du ønsker at tælle NULL bytes også ??
Avatar billede hoppe11 Nybegynder
01. juli 2007 - 13:58 #8
jeg ved ikke om det nogensinde vil blive nødvendigt?
Avatar billede erikjacobsen Ekspert
01. juli 2007 - 14:18 #9
Ikke ved normalt input fra en almindelig bruger. Ellers skal du vel bare finde dem: "\x00"
Avatar billede hoppe11 Nybegynder
01. juli 2007 - 16:00 #10
tak for hjælpen, erik :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester