Answers:
AbstractBlock所有对的委托调用中的转义方法Magento\Framework\Escaper,因此您将在此处找到概述。
让我们看一下公共方法及其文档:
/**
 * Escape string for HTML context. allowedTags will not be escaped, except the following: script, img, embed,
 * iframe, video, source, object, audio
 *
 * @param string|array $data
 * @param array|null $allowedTags
 * @return string|array
 */
public function escapeHtml($data, $allowedTags = null)对于任何输出,这应该是您的默认转义方法。按照惯例,必须对所有不包含“ Html”的方法的结果进行转义。
(自Magento 2.2以来)
/**
 * Escape a string for the HTML attribute context
 *
 * @param string $string
 * @param boolean $escapeSingleQuote
 * @return string
 */
public function escapeHtmlAttr($string, $escapeSingleQuote = true)例如,使用此命令可转义HTML属性中的输出
title="<?php echo $block->escapeHtmlAttr($title) ?>"它将转义HTML,但也引号(")
默认情况下,它也将转义单引号,因此也可以:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"如果不需要,请将第二个参数设置为false。
/**
 * Escape URL
 *
 * @param string $string
 * @return string
 */
public function escapeUrl($string)可用于输出URL。它将应用默认HTML转,另外移除了javascript:,vbscript:和data:。如果要防止用户提供的链接中出现此类URL,可以使用该方法。
在Magento 2.1之前,该功能尚未包括在内,您需要使用它escapeXssInUrl()。根本没有理由使用escapeUrl()。
否则,仅$block->escapeHtmlAttr()用于URL。
(自Magento 2.2以来)
/**
 * Encode URL
 *
 * @param string $string
 * @return string
 */
public function encodeUrlParam($string)这会将URL编码应用于参数。对于内部URL,您应该始终使用getUrl(),其中已经为您完成了URL编码,因此只有在您手动构建外部URL时才需要这样做。
(自Magento 2.2以来)
/**
 * Escape string for the JavaScript context
 *
 * @param string $string
 * @return string
 */
public function escapeJs($string)为JavaScript编码unicode字符,例如♥变为\u2665。用它来转义JS字符串中的输出。对于内联Javascript(即onclick属性),您仍然需要调用escapeHtmlAttr()。
请注意,如果您使用json_encode(),它已经进行了相同的转义,在这种情况下,escapeJs()一定不能使用。
(自Magento 2.2以来)
/**
 * Escape string for the CSS context
 *
 * @param string $string
 * @return string
 */
public function escapeCss($string)编码CSS的unicode字符(请参阅参考资料escapeJs()),例如在contentCSS属性中使用。
escapeHtmlAttr()改用escapeUrl()改用escapeHtmlAttr()改用escapeHtmlAttr并escapeHtmlAttr在2.1.2中不存在...至少在/vendor/magento/framework/Escaper.php以后没有添加,并重新标记magento
                    这是针对Magento 2.0的。对于2.1,请参考Fabian的答案
escapeHtml如果字符串输出不应包含HTML,请使用此函数。
例:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>escapeQuote如果是HTML属性,请使用此功能
例:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>escapeUrl在URL输出的情况下使用此功能(无XSS防护-仅字符转换)
例:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>escapeXssInUrl在URL输出的情况下使用此功能(防止XSS-包括字符对话)
例:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>count()(示例echo (int)$var)echo 'test')echo "test")__方法这是用于翻译的目的。当您知道可以翻译字符串时,请使用它。
例如:
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>__()也应该转义所有翻译吗?我对粘贴到/* @escapeNotVerified */各处有点累:/
                    __并非出于安全目的,而是出于翻译目的
                    echo $this->escapeHtml(__('Text to translate'))