2017-02-01 3 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 html_entity_decode("<p>bl&agrave; &eacute; bla</p>"); 

또는이 :

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

내가 예상 결과를 얻을 :

어떤 이상한 것은 그게 내가이 시도입니다 그래서 blà é bla

을, 나는 생각하지 않는다 그것은 charset 문제이지만, 리터럴 문자열로 작동하지만 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은 자바 스크립트로 생성되었으므로 내 링크의 href 변수에 encodeURIComponent을 입력 했으므로 작동합니다.

0

매개 변수가 포함 된 URL을 URL 및 JavaScript 함수와 같은 값으로 전달하려는 경우.

, 당신은 한 번만 urldecode() 필요는 자바 스크립트 함수 (page.php)에 의해 개방되는 페이지에서이

<?php 

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

처럼, 두 번 PHP urlencode() 기능을 통해 URL 값을 전달 왜냐하면 자바 스크립트가 그것을 통과하는 URL을 '만지기'때문에 URL 자체를 한번 해독하기 때문입니다. 따라서 PHP 스크립트에서 다시 한 번 디코딩하여 이중 인코딩을 완전히 취소하십시오.

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

이렇게하지 않으면, 대상 스크립트의 결과 URL 값이 ? 물음표 다음 모든 VAR = 값이 없음을 확인할 수 있습니다.

index.php?id=4 

친절이 온라인 도구를 확인 : URL Encode, URL Decode

관련 문제