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()
),例如在content
CSS属性中使用。
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'))