2011-02-03 9 views
0

を働いていないことは、私のコードはhtmlspecialchars()またはにhtmlentities()ここで

$currentPage = SITE_URL.'/'.basename($_SERVER['PHP_SELF'])."?".substr($tail,1); 
//For example a URL 'http://php.net/docs.php 
' 
$currentPage = htmlspecialchars($currentPage); 
//$currentPage = htmlentities($currentPage); 

//I was hoping for a output like this 'http%3A%2F%2Fphp.net%2Fdocs.php ' 
echo $currentPage; //but I get http://php.net/docs.php again 

である私は、マニュアルによると、入力

+0

$ _SERVER ['PHP_SELF']の代わりに$ _SERVER ['SCRIPT_NAME']を使用してください。 $ _SERVER ['PHP_SELF']は、/index.php/someotherpage.phpに行くことで騙されます。それ以外は、他の人たちは言った。 – igorw

+0

@igorw彼はすでにそれを消毒しています –

+0

@Col。 ShrapnelはXSSを防ぎますが、basenameは彼に間違った結果を与えます(例えば 'someotherpage.php'など)。 – igorw

答えて

0

私はあなたがほしいと思うと思うurlencode。あなたが望むようにhttp://php.net/docs.phphttp%3A%2F%2Fphp.net%2Fdocs.phpをエンコードします。

0

とまったく同じ出力を得る:

この機能がありますhtmlentities()を含む を除くすべての点で、 htmlspecialchars()と同じです。 すべての文字は、HTML文字エンティティ e擬似体は、これらの エンティティに翻訳されます。

元の入力を見ることなく、元の入力には翻訳できる文字が含まれていないと仮定できます。

0

同じ出力を得た場合、エスケープするものはありませんでした。

htmlentities()は、エンティティ同等に<>または&を変換することになっています。他のASCII文字は/または:のようになります。したがって、あなたのURLにはおそらくそれらのURLしか含まれていませんが、たとえば&はありません。

関連する問題