8

私は次のようなURLを持っています

test.php?x=hello+world&y=%00h%00e%00l%00l%00o

ファイルに書き込むとき

file_put_contents('x.txt', $_GET['x']); // -->hello world
file_put_contents('y.txt', $_GET['y']); // -->\0h\0e\0l\0l\0o 

しかし、エンコードせずに書き込む必要があります

file_put_contents('x.txt', ????); // -->hello+world
file_put_contents('y.txt', ????); // -->%00h%00e%00l%00l%00o

どのようにできるのか?

ありがとう

4

3 に答える 3

5

The$_GETおよび$_REQUESTsuperglobals はデコード関数 ( と同等) を介して自動的に実行されるため、URL 文字列で渡された文字と一致するようにデータをurldecode()再取得する必要があります。urlencode()

file_put_contents('x.txt', urlencode($_GET['x'])); // -->hello+world
file_put_contents('y.txt', urlencode($_GET['y'])); // -->%00h%00e%00l%00l%00o

これをローカルでテストしましたが、完全に機能しています。ただし、コメントから、エンコード設定も確認することをお勧めします。の結果がurlencode($_GET['y'])( ) で渡されている場合%5C0h%5C0e%5C0l%5C0l%5C0o、を単一のヌル文字として正しく解釈するのではなく、リテラル文字列(文字に連結された文字など) として解釈されているようです。null character%00"\0"\0\0

文字列エンコーディングと ASCII デバイス制御文字に関する PHP ドキュメントを参照してください。

于 2013-03-21T05:26:28.417 に答える
0

urlencode()URLに値を渡して値を取得するために使用できると思いますurldecode()

于 2013-03-21T05:28:00.680 に答える