출력 데이터를 이스케이프 처리하는 방법?


답변:


33

상황에 따라 몇 가지 도우미 방법이 있습니다. 모두에 정의되어 있습니다 Mage_Core_Helper_Abstract뿐만 아니라에서 Mage_Core_Block_Abstract당신이 그들을 사용할 수 있도록, $this->...()모든 템플릿 :

  • escapeHtml(): 실제로 htmlspecialchars권장 매개 변수를 사용하여 HTML을 이스케이프합니다 $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false);.-또한 허용 된 태그의 화이트리스트를 지정하고 배열에서 메소드를 호출하여 모든 요소를 ​​한 번에 이스케이프 할 수 있습니다. 인라인 텍스트에 사용하십시오.
  • quoteEscape(): 화이트리스트 및 배열 처리가없는 간단한 버전이지만 작은 따옴표뿐만 아니라 큰 따옴표도 이스케이프 처리 하여 HTML 속성 내의 텍스트에 유용 합니다 .
  • jsQuoteEscape(): 이것은 백 슬래시로 작은 따옴표를 이스케이프 처리합니다. JavaScript에서 문자열 리터럴을 이스케이프 처리하는 데 사용됩니다. 그러나 이것은 안전하지 않습니다 . (@Xorax의 예 :) 'test\\\'+alert("powned");//'. 백 슬래시를 추가로 이스케이프해야합니다. 대신 사용하십시오 quoteEscape()!
  • escapeUrl():이 방법이 존재하는 이유를 모르겠습니다. URL 인코딩 문자열 이 아니며htmlspecialchars() 매개 변수가없는 평범한 것 입니다. 사용하지 마십시오. 이제까지.

    /**
     * Escape html entities in url
     *
     * @param string $data
     * @return string
     */
    public function escapeUrl($data)
    {
        return htmlspecialchars($data);
    }
    
  • 관련 메모에는 urlEncode()URL 인코딩도 적용되지 않지만 base64 대신 적용되는 것이 있습니다. 필요한 것을 정확히 모르는 경우 사용하지 마십시오.

    /**
     *  base64_encode() for URLs encoding
     *
     *  @param    string $url
     *  @return   string
     */
    public function urlEncode($url)
    {
        return strtr(base64_encode($url), '+/=', '-_,');
    }
    

네, 이름이 일치하지 않습니다. 모든되면 그 메소드 이름은 계획을 다음했다 somethingEscape()하지만 그때 누군가가 더 이상 사용하기로 결정 htmlEscape()하고 urlEscape()새로운 방법에 찬성하고 잊어 quoteEscape()하고 jsQuoteEscape().


jsQuoteEscape 정말 안전합니까? str_replace ($ quote, '\\'. $ quote, ...)가 작업을 수행하지 않는 것처럼 보입니다
Xorax

@ Xorax 아주 좋은 지적. 답변을 업데이트하겠습니다.
Fabian Schmengler

21

그냥 번역 해

항상 표준 번역 기능을 사용해야합니다

블록 인스턴스에서

<?php echo $this->__('Text goes here'); ?>

다른 곳

<?php echo Mage::helper('core')->__('Text goes here'); ?>

sprintfPHP에서 사용하는 것과 같은 방식으로 사용하십시오

예 :

<?php $foo = 'rocks'; ?>
<?php echo $this->__('Sonassi %s', $foo); ?>

아니면 탈출

블록 인스턴스에서

<?php echo $this->escapeHtml('HTML goes here'); ?>

다른 곳

사용 Mage/Core/Helper/Abstract.php

escapeHtml($data, $allowedTags = null)

예 :

<?php echo Mage::helper('core')->escapeHtml('HTML goes here'); ?>

중요 사항 : Mage_Core_Block_Abstract::htmlEscape()Magento v 1.4.0.0-rc1부터 사용되지 않으며 Mage_Core_Block_Abstract::escapeHtml()대신 사용해야합니다.
barell

5
또 다른 중요한 참고 사항 : 번역은 아무것도 탈출하지 않습니다 . 사용해보십시오 : $this->__('Hello %s', '<script>alert("XSS!")</script>').
Fabian Schmengler 12

3

클래스 Mage_Core_Block_AbstractMage_Core_Helper_Abstract둘 다 동일한 함수를 사용하며 Mage_Core_Helper_Abstract::escapeHtml구현 내부적으로 HTML 내용이있는 배열에 대한 추가 논리를 구현하는 것 외에도 PHP htmlspecialchars 함수를 사용합니다.

이 함수는 $ this를 통해 모든 블록 및 도우미 클래스에서 액세스 할 수 있으며 함수가 공개되어 있으므로 Mage :: helper ( 'core') 또는 다른 곳의 다른 도우미 클래스를 통해 사용할 수 있습니다.


-1

스페인어 변환의 경우 :

$value = str_replace(array("&lt;", "&gt;"), array("<", ">"), htmlspecialchars("Lorem ipsum &gt;", ENT_COMPAT, "UTF-8", false));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.