2016-08-01 8 views
0

Das folgende ist mein Codebeispiel:addcslashes Flucht Großbuchstaben

<?php 
    echo addcslashes('ABC','\0..\37'); 
?> 

Meine Ausgabe ist

\A\B\C 

Gemäß der Dokumentation, \0...\37 würde die ASCII-Werte zwischen 0 und 31 entweichen Aber ich finde jene Hauptalphabete, deren ASCII-Werte mehr als 31 sind, werden hier entwichen. Wenn ich das mit kleinen Buchstaben versuchte, funktioniert es richtig.

Was sollte ich hinzufügen, damit die Funktion addslashes für bestimmte ASCII-Zeichen funktioniert?

+0

PHP interpretiert Escape-Sequenzen nicht in einfachen Anführungszeichen (siehe [string documentation] (http://php.net/manual/en/language.types.string.php#language.types.string.syntax.double)). – wazelin

Antwort

2

Verwenden doppelte Anführungszeichen, so dass \ -escapes richtig funktioniert:

echo addcslashes('ABC', "\0..\37"); 

Mit einfachen Anführungszeichen wird '\0..\37' als \ + Bereich 0..\ + Zeichen 37 interpretiert.

Zum Beispiel werden alle Hauptalphabete in diesem Bereich 0..\ sein, weshalb sie entkommen konnten.

1

Sie müssen doppelte Anführungszeichen für die $charlist Parameter verwenden:

echo addcslashes('ABC', "\0..\37"); 

Mit single quoted string Backslash keine spezielle Zeichensequenz darstellt.

Siehe auch das Handbuch für double quoted strings.

+0

Danke. Aber warum funktioniert es anders für einzelne Schrägstriche? –

+0

Weil mit [single quotes] (https://secure.php.net/manual/en/language.types.string.php#language.types.string.syntax.single) Backslash stellt keine spezielle Zeichenfolge dar. Siehe Handbuch für [doppelt zitierte Strings] (https://secure.php.net/manual/en/language.types.string.php#language.types.string.syntax.double) – Finwe