Wie kann ich feststellen, ob ein String mit gzcompress
komprimiert wurde (abgesehen vom Vergleich) Größe der Zeichenfolge vor / nach dem Aufruf gzuncompress
, oder wäre das der richtige Weg zu tun es)?
Eine Zeichenfolge und eine komprimierte Zeichenfolge sind beide einfach Sequenzen von Bytes. Sie können eine Bytefolge nicht wirklich von einer anderen Bytefolge unterscheiden. Sie sollten wissen, ob ein Byteblock ein komprimiertes Format darstellt oder nicht von den zugehörigen Metadaten.
Wenn Sie programmgesteuert erraten müssen, haben Sie mehrere Möglichkeiten, die Sie ausprobieren können:
0x20
" nach offensichtlichen "seltsamen" Bytes zu suchen. Diese Bytes werden normalerweise nicht in normalem Text verwendet. Es gibt jedoch keine wirkliche Garantie dafür, dass sie in einer komprimierten Zeichenfolge auftreten. mb_check_encoding
, um zu ermitteln, ob eine Zeichenfolge in der Codierung gültig ist, in der Sie vermuten, dass sie darin enthalten ist. Ist dies nicht der Fall, Es ist wahrscheinlich komprimiert (oder Sie haben auf die falsche Codierung überprüft). Mit der Einschränkung, dass praktisch jede Byte-Sequenz in praktisch jeder Einzelbyte-Kodierung gültig ist, funktioniert dies nur für Multi-Byte-Kodierungen. PRE:
Ich schätze, wenn Sie eine Anfrage senden, können Sie sofort in $http_response_header
schauen, um zu sehen, ob eines der Elemente im Array ist eine Variation von Content-Encoding: gzip
. Aber das ist LAME!
es gibt eine weitaus bessere Methode.
Hier ist WIE MAN ...
Überprüfen Sie, ob es GZIP ist. Wie ein BOSS!
nach GZIP RFC :
Der ID1
und ID2
identifizieren den Inhalt als GZIP . Und CM
gibt an, dass die ZLIB_ENCODING
(die Komprimierungsmethode) ZLIB_ENCODING_DEFLATE
ist - was normalerweise von GZIP mit allen Webservern verwendet wird.
oh! und sie haben feste Werte:
"\x1f"
"\x8b"
"\x08"
(oder nur 8 ...)
$is_gzip = 0 === mb_strpos($mystery_string , "\x1f" . "\x8b" . "\x08");
UTF-8
zu verwenden (da wir nicht wirklich wissen, ob der Webserver einen GZIP-Inhalt zurückgibt. Accept-Encoding: gzip
angegeben wird, teilt er dem Web-Server mit, dass einen GZIP-Inhalt ausgeben darf. ZLIB
-Methoden einfach ist. Tags und Links string php compression