[php] htmlentities () 대 htmlspecialchars ()

의 차이점은 무엇입니까 htmlspecialchars()htmlentities(). 언제 하나를 사용해야합니까?



답변

HTMLentities에 대한 PHP 문서에서 :

이 기능은 HTML 문자 엔터티에 해당하는 모든 문자가이 엔터티로 변환되는 htmlspecialchars()것을 제외하고 모든면에서 동일합니다 htmlentities().

htmlspecialchars에 대한 PHP 문서에서 :

특정 문자는 HTML에서 특별한 의미가 있으며, 의미를 보존하려면 HTML 엔티티로 표시해야합니다. 이 함수는 이러한 변환 중 일부가 포함 된 문자열을 반환합니다. 번역은 일상적인 웹 프로그래밍에 가장 유용한 번역입니다. 모든 HTML 문자 엔티티를 변환해야하는 경우 htmlentities()대신 사용하십시오.

차이점은 인코딩되는 것입니다. 앰퍼샌드, 큰 따옴표 및 작은 따옴표,보다 작거나 큰 (specialchars)와 같은 모든 (엔티티) 또는 “특수”문자를 선택할 수 있습니다.

htmlspecialchars가능할 때마다 사용하는 것을 선호 합니다.

예를 들면 다음과 같습니다.

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^

    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^


답변

htmlspecialchars 사용될 수있다:

  1. HTML과 동등한 문자를 모두 인코딩 할 필요가없는 경우

    페이지 인코딩이 텍스트 특수 기호와 일치하는 것을 알고 있다면 왜 사용 htmlentities합니까? htmlspecialchars훨씬 간단하고 클라이언트에 보낼 코드가 적습니다.

    예를 들면 다음과 같습니다.

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^
    
    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^

    두 번째는 더 짧으며 ISO-8859-1 문자 집합이 설정되어 있으면 아무런 문제가 없습니다.

  2. HTML 엔터티 디코딩을 피하기 위해 브라우저를 통해서만 데이터를 처리 할 때,

  3. 출력이 XML 인 경우 ( Artefacto의 답변 참조 )


답변

이로 인코딩 중입니다 htmlentities.

implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) ):

“& <>
¡ ¢ £ ¤ ¥ ¦ § ¨ © ª«¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º»¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Œ œ Š ˆ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ Φ ω ϑ ϒ ϖ ‌ ‍ – — ” ‚“” „† ‡ •… ‰ ′ ″‹›‾ ⁄ € ℑ ℘ ℜ ℜ ™ ℵ ← ↑ → ↓ ↔ ↵ ⇐ ⇑ ⇒ ⇓ ⇔ ∀ ∂ ∃ ∅ ∇ ∈ ∈ ∉ ∋ ∏ ∑ − ∗ √ ∝ ∞ ∠ ∧ ∨∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ ⋅ ⌈ ⌉ ⌊ ⌋ ⟨⟩ ◊ ♠ ♣ ♥ ♦

이로 인코딩 중입니다 htmlspecialchars.

implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) ):

“& <>


답변

때문에:

  • 때로는 XML 데이터를 작성하고 있으며 XML 파일에서 HTML 엔터티를 사용할 수 없습니다.
  • 때문에 htmlentities보다 대체 이상의 문자 htmlspecialchars. 이것은 불필요하며 PHP 스크립트의 효율성이 떨어지고 결과적으로 HTML 코드를 읽을 수 없습니다.

htmlentities 페이지에서 UTF-8 대신 ASCII 또는 LATIN-1과 같은 인코딩을 사용하고 페이지와 다른 인코딩으로 데이터를 처리하는 경우에만 필요합니다.


답변

htmlspecialchars($strText, ENT_QUOTES)문자열이 XML 및 HTML 안전을 원할 때 사용해야 합니다.

예를 들어, encode

  • &에 & amp;
  • “~ & quot;
  • <에서 & lt;
  • >에서 & gt;
  • ‘에서 & # 039;

그러나 텍스트에 유니 코드 또는 흔하지 않은 기호 인 추가 문자가있는 경우 htmlentities ()를 사용하여 HTML 페이지에 올바르게 표시되도록해야합니다.

노트:

  • ‘는 htmlspecialchars ()에 의해 & # 039; ENT_QUOTES 옵션이 전달 된 경우 & # 039; 그러면 & apos; 이전 버전의 Internet Explorer는 & apos; 실재.
  • 기술적으로>는 XML 사양에 따라 인코딩 할 필요는 없지만 일반적으로 <인코딩 요구 사항과 일치하도록 인코딩됩니다.

답변

htmlspecialchars ()문자열이 HTML로 구문 분석되지 않도록 최소량의 인코딩을 수행합니다. 이렇게 htmlentities ()하면 인코딩이있는 모든 것을 절대적으로 인코딩하는 데 사용했을 때보 다 문자열을 사람이 읽을 수 있습니다 .


답변

방금 get_html_translation_table기능 에 대해 알게되었습니다 . 전달 HTML_ENTITIES하거나 HTML_SPECIALCHARS인코딩 할 문자와 인코딩 방법이 포함 된 배열을 반환합니다.