In PHP
was bedeutet es , durch eine Funktion zu sein binary-safe
?
Was macht sie besonders und wo werden sie normalerweise verwendet?
Dies bedeutet, dass die Funktion ordnungsgemäß funktioniert, wenn Sie beliebige Binärdaten übergeben (dh Zeichenfolgen, die Nicht-ASCII-Bytes und / oder Null-Bytes enthalten).
Beispielsweise könnte eine nicht binär sichere Funktion auf einer C-Funktion basieren, die nullterminierte Zeichenfolgen erwartet. Wenn die Zeichenfolge also ein Nullzeichen enthält, würde die Funktion alles danach ignorieren.
Dies ist relevant, da PHP Zeichenfolgen- und Binärdaten nicht sauber voneinander trennt.
Die anderen Benutzer haben bereits erwähnt, was
binary safe
im Allgemeinen bedeutet.In PHP ist die Bedeutung spezifischer und bezieht sich nur auf das, was Michael als Beispiel gibt.
Allen Zeichenfolgen in PHP ist eine Länge zugeordnet, die der Anzahl der Bytes entspricht, aus denen sie bestehen. Wenn eine Funktion eine Zeichenfolge bearbeitet, kann sie entweder:
0
angezeigt wird.Es ist auch wahr, dass alle von der Engine manipulierten String-PHP-Variablen ebenfalls nullterminiert sind. Das Problem bei Funktionen, die auf 2. basieren, besteht darin, dass, wenn die Zeichenfolge selbst ein Byte mit Wert enthält
0
, die Funktion, die sie manipuliert, denkt, dass die Zeichenfolge an diesem Punkt beendet ist, und danach alles ignoriert.Wenn beispielsweise die PHP-
strlen
Funktion wie die C-Standardbibliothek funktioniertstrlen
, ist das Ergebnis hier falsch:quelle
strlen()
a binary safe - Funktion? Ich bestätige dies von Ihnen, da auf der PHP-Handbuchseite für die Funktionstrlen()
nicht erwähnt wurde, ob es sich um eine binärsichere Funktion oder eine nicht-binärsichere Funktion handelt. Dieses einzige fehlende Ding im PHP-Handbuch schafft die Verwirrung in meinem Kopf, deshalb möchte ich es von Ihnen bestätigen. Ich freue mich sehr auf Ihre Antwort. Danke.php -r 'var_dump("\x00\x00\x00");'
zur Überprüfung aus, aber PHPs Strlen ist seit sehr langer Zeit binär sicher , da mindestens PHP 4.x (das heißt, es gibt einen Gräuel namens "mb_overload", aber lassen Sie uns einfach so tun, als ob das nicht existiert - php.net /manual/de/mbstring.overload.php )Mehr Beispiele:
\x
zeigt die hexadezimale Notation an. Siehe: PHP-StringsASCII-Tabelle , um die ASCII-Zeichenliste anzuzeigen
quelle
Hello\r\nWORLD
sollte es nicht dasselbe sein, alsHello
ob die Funktion binär sicher ist, oder?strlen()
binary safe ?