diff --git a/lib/internal/Magento/Framework/Escaper.php b/lib/internal/Magento/Framework/Escaper.php index 03c1c19a66c0ff89bcce4c0c8ddcf415dfef72d2..f1425497196b00e86189a1f3ca24b1ee6ca54b3a 100644 --- a/lib/internal/Magento/Framework/Escaper.php +++ b/lib/internal/Magento/Framework/Escaper.php @@ -10,35 +10,19 @@ namespace Magento\Framework; */ class Escaper { - const HTMLSPECIALCHARS_FLAG = ENT_QUOTES | ENT_SUBSTITUTE; - /** * @var \Zend\Escaper\Escaper */ - private $zendEscaper; - - /** - * @param void - * @return \Magento\Framework\Escaper - */ - private function getZendEscaper() - { - if ($this->zendEscaper === null) { - $this->zendEscaper = - \Magento\Framework\App\ObjectManager::getInstance() - ->get(\Magento\Framework\ZendEscaper::class); - } - return $this->zendEscaper; - } + private $escaper; /** - * Escape html entities + * Escape HTML entities * - * @param string|array $data - * @param array $allowedTags + * @param string|array $data + * @param array $allowedTags * @return string|array */ - public function escapeHtml($data, $allowedTags = null) + public function escapeHtml($data, $allowedTags = []) { if (is_array($data)) { $result = []; @@ -46,13 +30,13 @@ class Escaper $result[] = $this->escapeHtml($item); } } elseif (strlen($data)) { - if (is_array($allowedTags) and !empty($allowedTags)) { + if (is_array($allowedTags) && !empty($allowedTags)) { $allowed = implode('|', $allowedTags); $result = preg_replace('/<([\/\s\r\n]*)(' . $allowed . ')([\/\s\r\n]*)>/si', '##$1$2$3##', $data); - $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8', false); + $result = htmlspecialchars($result, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', false); $result = preg_replace('/##([\/\s\r\n]*)(' . $allowed . ')([\/\s\r\n]*)##/si', '<$1$2$3>', $result); } else { - $result = htmlspecialchars($data, ENT_COMPAT, 'UTF-8', false); + $result = htmlspecialchars($data, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8', false); } } else { $result = $data; @@ -61,43 +45,36 @@ class Escaper } /** - * Escape a string for the HTML Attribute context. + * Escape a string for the HTML attribute context * - * @param string $data + * @param string $string * @return string */ - public function escapeHtmlAttr($data) { - return $this->getZendEscaper()->escapeHtmlAttr($data); + public function escapeHtmlAttr($string) + { + return $this->getEscaper()->escapeHtmlAttr($string); } /** - * Escape html entities in url + * Escape URL * - * @param string $data + * @param string $string * @return string */ - public function escapeUrl($data) + public function escapeUrl($string) { - return htmlspecialchars($data, ENT_COMPAT, 'UTF-8', false); + return $this->escapeHtml($this->escapeXssInUrl($string)); } /** - * Escapes data for the Javascript context + * Escape string for the JavaScript context * - * @param string|array $data - * @return array|string + * @param string $string + * @return string */ - public function escapeJs($data) + public function escapeJs($string) { - if (is_array($data)) { - $result = []; - foreach ($data as $item) { - $result[] = $this->getZendEscaper()->escapeJs($item); - } - } else { - $result = $this->getZendEscaper()->escapeJs($data); - } - return $result; + return $this->getEscaper()->escapeJs($string); } /** @@ -106,7 +83,6 @@ class Escaper * @param string|array $data * @param string $quote * @return string|array - * * @deprecated */ public function escapeJsQuote($data, $quote = '\'') @@ -128,7 +104,6 @@ class Escaper * * @param string $data * @return string - * * @deprecated */ public function escapeXssInUrl($data) @@ -147,7 +122,6 @@ class Escaper * @param string $data * @param bool $addSlashes * @return string - * * @deprecated */ public function escapeQuote($data, $addSlashes = false) @@ -157,4 +131,20 @@ class Escaper } return htmlspecialchars($data, ENT_QUOTES, null, false); } + + /** + * Get escaper + * + * @param void + * @return \Magento\Framework\Escaper + * @deprecated + */ + private function getEscaper() + { + if ($this->escaper == null) { + $this->escaper = \Magento\Framework\App\ObjectManager::getInstance() + ->get(\Magento\Framework\ZendEscaper::class); + } + return $this->escaper; + } } diff --git a/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php b/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php index 7fca848f56930eab284015855703f24864bb68c2..915d3dffe4ec8f23c653ae38db9833c4cc942a7a 100644 --- a/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php +++ b/lib/internal/Magento/Framework/Test/Unit/EscaperTest.php @@ -28,7 +28,7 @@ class EscaperTest extends \PHPUnit_Framework_TestCase $this->_escaper = new Escaper(); $this->zendEscaper = new \Magento\Framework\ZendEscaper(); $objectManagerHelper = new ObjectManager($this); - $objectManagerHelper->setBackwardCompatibleProperty($this->_escaper, 'zendEscaper', $this->zendEscaper); + $objectManagerHelper->setBackwardCompatibleProperty($this->_escaper, 'escaper', $this->zendEscaper); } /** diff --git a/lib/internal/Magento/Framework/View/Element/AbstractBlock.php b/lib/internal/Magento/Framework/View/Element/AbstractBlock.php index bed41de2012066b9c6526d75370c6f703449c8b1..8e4b4bd32bec1fe44806387e8eae643eff700d5b 100644 --- a/lib/internal/Magento/Framework/View/Element/AbstractBlock.php +++ b/lib/internal/Magento/Framework/View/Element/AbstractBlock.php @@ -865,33 +865,37 @@ abstract class AbstractBlock extends \Magento\Framework\DataObject implements Bl } /** - * Escape html entities + * Escape HTML entities * * @param string|array $data * @param array|null $allowedTags * @return string */ - public function escapeHtml($data, $allowedTags = null) + public function escapeHtml($data, $allowedTags = []) { return $this->_escaper->escapeHtml($data, $allowedTags); } /** - * @param string $data + * Escape string for the JavaScript context + * + * @param string $string * @return string */ - public function escapeJs($data) + public function escapeJs($string) { - return $this->_escaper->escapeJs($data); + return $this->_escaper->escapeJs($string); } /** - * @param string $data + * Escape a string for the HTML attribute context + * + * @param string $string * @return string */ - public function escapeHtmlAttr($data) + public function escapeHtmlAttr($string) { - return $this->_escaper->escapeHtmlAttr($data); + return $this->_escaper->escapeHtmlAttr($string); } /** @@ -911,14 +915,14 @@ abstract class AbstractBlock extends \Magento\Framework\DataObject implements Bl } /** - * Escape html entities in url + * Escape URL * - * @param string $data + * @param string $string * @return string */ - public function escapeUrl($data) + public function escapeUrl($string) { - return $this->_escaper->escapeUrl($data); + return $this->_escaper->escapeUrl($string); } /** @@ -926,6 +930,7 @@ abstract class AbstractBlock extends \Magento\Framework\DataObject implements Bl * * @param string $data * @return string + * @deprecated */ public function escapeXssInUrl($data) { @@ -940,6 +945,7 @@ abstract class AbstractBlock extends \Magento\Framework\DataObject implements Bl * @param string $data * @param bool $addSlashes * @return string + * @deprecated */ public function escapeQuote($data, $addSlashes = false) { @@ -952,6 +958,7 @@ abstract class AbstractBlock extends \Magento\Framework\DataObject implements Bl * @param string|array $data * @param string $quote * @return string|array + * @deprecated */ public function escapeJsQuote($data, $quote = '\'') {