NULL
文字列内の output は、コード ポイントがゼロの文字を表します。あなたの文字列はこれと同等です:
String s = "\0*\0_messages";
Java では\0
印刷できません。ただし、文字列はそれを保持します-文字列の長さを確認すると、10 ではなく 12 ですが、文字列をコンソールに出力すると 10 文字しか出力されません。
System.err.println(s.length());
System.err.println(s);
版画(デモ)
12
*_messages
コメント:これは、serialized-php-parser
このパーサーの問題は、そのparseString
メソッドの 156 行目で、出力される文字列の長さが構造内の文字数と一致することを期待しているs:<length>:
ことです。宣言されているの<length>
は 12 ですが、実際の長さは 10 しかないためparseString
、175..176 行でストリームから余分な 2 文字を消費し、他のすべてを破壊します。
そのパーサーを'\0'
使い続けたい場合は、文字列をエンコードする前に、アンダースコアなど、使用しない他の印刷可能な文字に文字を置き換え'\0'
てから、解析の反対側に戻すことを検討してください。