2017-02-01 7 views
1

私は非常に新しいPHPで、私の問題の答えを見つけることができません。URLからhtmlの特殊文字を取得できません

URLから特殊文字(つまり、àé)の文字列をエコーし​​ようとしました。

URL文字列:

$cont = $_GET['content']; 
echo $cont; 

結果: bl

だから、私のページを持っている場合でも、だから私行うこのblà é bla

preview.php?content=<p>bl&agrave; &eacute; bla</p>

期待は結果をエコー<meta charset="UTF-8">、私は試しました:

$cont = $_GET['content']; 
$cont = html_entity_decode($cont, ENT_COMPAT, 'UTF-8'); 
echo $cont; 

同じ結果: bl

私は同じ結果とページの先頭にヘッダ(header('Content-Type: text/html; charset=UTF-8');)と試みました。奇妙な何

それは私がこれ試してくださいです:私は期待した結果を得る

echo "<p>bl&agrave; &eacute; bla</p>"; 

echo html_entity_decode("<p>bl&agrave; &eacute; bla</p>"); 

、あるいはこれをそう blà é bla

を、私は考えていませんそれは文字セットの問題ですが、リテラル文字列では動作しますが、get変数では動作しない理由を理解できません。

+0

をあなたはそれはあなたがそれを取るとき、それをデコードすることができるように、URLに行く前に文字列をエンコードする必要があります。アンパサンドはURLの特殊文字であり、クエリ文字列パラメータを区切るために使用されます。 – Tom

+1

'&'は次のgetパラメータのURLセパレータです。使用する前にURLをエンコードする必要があります。したがって、 '&'はエンコーディング後に '%26'になります。 'echo $ cont;'このvar_dump($ _ GET); 'と' Array([content] => bl [agrave; _] => [eacute; _bla] =>)を見ると、 'だから' agrave; _は配列キーになります。 – JustOnUnderMillions

答えて

1

であなたのURLをエンコードします。たとえばurlencodehtmlentities

$url = 'content=' . urlencode('content=<p>bl&agrave; &eacute; bla</p>'); 
echo '<a href="preview.php?' . htmlentities($url) . '">'; 
1

@JustOnUnderMillionsは、正しいです。

例:

あなたは

http://localhost/index.php?content=%3Cp%3Ebl&agrave;%20&eacute;%20bla%3C/p%3E 

echo $_GET['content']; 

OUTPUT: bl 

のようなURLからのデータにアクセスしようとする。しかし、あなたが

http://localhost/index.php?content=%3Cp%3Ebl%26agrave%3B%20%26eacute%3B%20bla%3C%2Fp%3E 

echo $_GET['content']; 

OUTPUT: blà é bla 

のようにデータを符号化することによってデータを渡すとき、のためにurlecode機能を使用することをお勧めしている場合データをURLにエンコードします。

0

ありがとうございます。

これは完全に機能します。

実際には、私のURLはjavascriptで生成されていますので、私はencodeURIComponentを自分のリンクのhref変数に加えました。

0

パラメータをURLとして、URLなどのjavascript関数を使用してURLに渡す場合。

JavaScript関数(page.php)で開かれているページでは、この

<?php 

    $url = "index.php?id=4&pg=2"; 
    $url = urlencode(urlencode($url)); 
    echo "<a href=\"javascript:openWin('page.php?url=$url');\">"; 
?> 

のように、あなたは一度だけurldecode()に必要な、二回PHP urlencode()機能を通じてURL値を渡し、なぜならjavascriptは、javascriptがそれを通過するURLに「触れる」ので、一度そのURLをデコードするからです。ですから、PHPスクリプトでもう一度デコードして、ダブルエンコーディングを完全に元に戻してください。

<?php 
    $url = urldecode($_GET['url']); 
?> 

これを行わない場合は、ターゲット・スクリプト内の結果のURL値が?疑問符以下のすべてのVAR =の値が欠落していることがわかります。

index.php?id=4 

親切にも、このオンラインツールをご確認ください:URL EncodeURL Decode

関連する問題