2017-08-21 11 views
0

私は1つの引数を取るPHPスクリプトを持っています。そして私はその引数をキャプチャし、ここでurlencodeにphp引数は改行で文字列を返します

を行う必要があり、出力は、新しいラインがあるとして誤っているHow+are+you.%5CnAre+you+free%3F%だろう問題に

<?php 

$input=$argv[1]; 
#$input="How are you.\nAre you free?"; 
echo "$input\n"; 
$escape_input = urlencode("$input"); 
echo "$escape_input"; 

?> 

$ php test.php "How are you.\nAre you free?" 

を表示するサンプルコードです正しくエンコードされていません。

しかし、あなたは、コード内で同じ文字列をハードコーディングしている場合、それは 正しい出力を動作します:How+are+you.%0AAre+you+free%3F%

+0

あなたのコマンドでは、 '\ n'は2文字ですが、PHPコードでは1だけです。 – tilz0R

+0

どうすれば1とすることができますか?引数 –

+1

*から渡す必要があります。正しくエンコードされていません。 "* - 入力文字列に改行文字はありません。 '\ n'は改行ではありません。これは、PHPソースコードの文字列の改行文字のエンコーディングです。あなたのスクリプトに改行を渡すと、それが正しくエンコードされます。 – axiac

答えて

2

問題は、コードの入力です。 \nは、それがPHPでの引用符の内部で使用され、それがurlencodeに渡される前に、これ\nは改行文字に置き換えている場合は改行文字として解釈されているので、あなたは、

echo urlencode("Hello\nWorld."); 

プリントHello%0AWorld.を指摘したように。

php test.php "How are you.\nAre you free?"(bashで言うことができます)のコードを実行すると、$argv[1]には、バックスラッシュ文字を含む文字列と、それに続くnが含まれます。 urlencodeはバックスラッシュをエンコードし、nをそのまま残します。

改行文字でコードを実行するには、と入力してください。改行のある部分はと入力してください。

$ php test.php "How are you. 
Are you free?" 

代わりに、あなたはまた、手動入力でシーケンス\nを解釈し、改行文字に置き換えることができます。

$input = str_replace("\\n", "\n", $argv[1]); 

は最初の引数、検索パターンは、文字列 \nnバックスラッシュ)、及び第二引数、置き換える文字列であることに注意してください、改行文字があります。

関連する問題