Antworten:
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 safeim 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:
0angezeigt 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- strlenFunktion wie die C-Standardbibliothek funktioniert strlen, ist das Ergebnis hier falsch:
$str = "abc\x00abc";
echo strlen($str); //gives 7, not 3!
strlen()a binary safe - Funktion? Ich bestätige dies von Ihnen, da auf der PHP-Handbuchseite für die Funktion strlen()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:
<?php
$string1 = "Hello";
$string2 = "Hello\x00World";
// This function is NOT ! binary safe
echo strcoll($string1, $string2); // gives 0, strings are equal.
// This function is binary safe
echo strcmp($string1, $string2); // gives <0, $string1 is less than $string2.
?>
\xzeigt die hexadezimale Notation an. Siehe: PHP-Strings
0x00 = NULL
0x04 = EOT (End of transmission)
ASCII-Tabelle , um die ASCII-Zeichenliste anzuzeigen
Hello\r\nWORLDsollte es nicht dasselbe sein, als Helloob die Funktion binär sicher ist, oder?
strlen() binary safe ?