2011-01-24 5 views
14

나는 항상 URL/HTML 인코딩/이스케이프와 혼동스러워합니다. 나는 PHP를 사용하고 있으므로 일들을 정리하고 싶습니다. 개별 쿼리 문자열 부분URL/HTML 이스케이프/인코딩

$url = 'http://test.com?param1=' . urlencode('some data') . '&param2=' . urlencode('something else'); 
  • htmlentities을 위해 :

    나는 항상

    • urlencode를 사용한다고 말할 수 있도록 <> 같은 특수 문자를 이스케이프 동안 그가 제대로 렌더링되는 경우 브라우저

    각 기능을 사용할 수있는 다른 장소가 있습니까? 나는이 모든 도망 치는 것을 잘 못하고 항상 혼란 스럽다.

  • 답변

    29

    첫째로, 당신은 시간의 htmlentites 약 99 %를 사용해서는 안 : 그래서 당신은 종종 같은 것을 볼 수 있습니다. 대신 htmlspecialchars()을 사용하여 xml/html 문서에서 사용할 텍스트를 이스케이프 처리해야합니다. htmlentities은 사용중인 기본 문자 집합이 표시 할 수없는 문자를 표시하는 데 유용합니다 (페이지가 ASCII이지만 표시하려는 UTF-8 문자가있는 경우 유용합니다). 대신, 전체 페이지를 UTF-8로 만드십시오 (어려운 것은 아닙니다).

    까지 urlencode까지 머리에 못을 박았습니다.

    그래서, 요약하자면 :

    • 내부 HTML을 :

      <b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b> 
      
    • 을의 URL의 내부 :

      $url = '?foo='.urlencode('bar'); 
      
    18

    그건 맞다. 비록 - htmlspecialchars이 좋지만, 문자 세트를 곧바로 얻는 한. 어쨌든해야 할 일. 그래서 저는 그것을 사용하는 경향이 있습니다. 그래서 나는 그것을 엉망으로 만들었습니다.

    URL을 HTML 컨텍스트에 넣으면 (예 : a 태그의 href) URL을 이스케이프 처리해야합니다.

    echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>" 
    
    +0

    멋진 대답을. 이것은 다른 컨텍스트 내의 컨텍스트를 적절하게 이스케이프 (escape)하는 방법의 예입니다. urlencode가 문제를 일으키기 위해 특별한 html 문자를 절대로 출력하지 않더라도 전체 html 속성 컨텐츠를 이스케이프 처리하지 않아도된다는 점에 유의해야합니다. – Phil