Magento 2'nin şablonu korumak için kullanabileceği birkaç yöntem olduğunu biliyorum:
$block->escapeHtml()$block->escapeQuote()$block->escapeUrl()$block->escapeXssInUrl()
Ama bu yöntemlerin ne zaman kullanılacağını merak ediyorum?
Magento 2'nin şablonu korumak için kullanabileceği birkaç yöntem olduğunu biliyorum:
$block->escapeHtml()$block->escapeQuote()$block->escapeUrl()$block->escapeXssInUrl()Ama bu yöntemlerin ne zaman kullanılacağını merak ediyorum?
Yanıtlar:
AbstractBlockTüm temsilcilerden kaçan yöntemler çağrılır Magento\Framework\Escaper, böylece orada bir genel bakış bulacaksınız.
Genel yöntemlere ve belgelerine bakalım:
/**
* 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)
Bu, herhangi bir çıktı için varsayılan çıkış yönteminiz olmalıdır. Sözleşme, "Html" içermeyen tüm yöntemlerin sonucundan kaçılması gerektiğidir.
( Magento 2.2’den beri )
/**
* Escape a string for the HTML attribute context
*
* @param string $string
* @param boolean $escapeSingleQuote
* @return string
*/
public function escapeHtmlAttr($string, $escapeSingleQuote = true)
Örneğin, bir HTML özniteliğindeki çıktıdan kaçmak için kullanın
title="<?php echo $block->escapeHtmlAttr($title) ?>"
HTML'den kaçacak, aynı zamanda quotes ( ")
Varsayılan olarak, aynı zamanda tek tırnaktan kaçacaktır, yani bu da işe yarar:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
İstenmiyorsa ikinci parametreyi false olarak ayarlayın.
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
Bu URL'lerin çıktısını almak için kullanılabilir. Bu varsayılan HTML kaçış ve ek silen uygulayacak javascript:, vbscript:ve data:. Bu gibi URL'leri kullanıcı tarafından sağlanan bağlantılarda önlemek istiyorsanız, yöntemi kullanabilirsiniz.
Magento 2.1'e kadar bu özellik dahil edilmedi ve escapeXssInUrl()bunun yerine kullanmanız gerekiyordu . Hiç kullanmak escapeUrl()için hiçbir sebep yoktu .
Aksi takdirde, yalnızca $block->escapeHtmlAttr()URL’leri kullanın .
( Magento 2.2’den beri )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
Bu, parametrelere URL kodlaması uygular. Dahili URL'ler için her zaman getUrl(), URL kodlamanın sizin için yapıldığı yerlerde kullanmalısınız , bu nedenle, yalnızca harici bir URL oluşturduğunuzda bu gereklidir.
( Magento 2.2’den beri )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
JavaScript için unicode karakterleri kodlar, örneğin ♥olur \u2665. Bir JS dizesindeki çıktıdan kaçmak için kullanın . Satır içi Javascript (yani, onclicknitelikler) için hala aramanız gerekir escapeHtmlAttr().
Kullanmak eğer Not json_encode(), zaten aynı kaçışa yapar, bu durumda, escapeJs()kullanılmamalıdır.
( Magento 2.2’den beri )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
CSS için unicode karakterleri kodlar ( escapeJs()örneğin, contentCSS özniteliğinde kullanılmak üzere) .
escapeHtmlAttr()Bunun yerine kullanınescapeUrl()Bunun yerine kullanınescapeHtmlAttr()Bunun yerine kullanınescapeHtmlAttrve escapeHtmlAttr2.1.2'de mevcut değil ... en azından /vendor/magento/framework/Escaper.phpsonradan
Bu Magento 2.0 içindir. 2.1 için Fabian'ın cevabına bakınız.
escapeHtmlHTML içermemesi gereken bir dizge çıktısı olması durumunda bu işlevi kullanın.
Örnek:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuoteHTML özellikleri durumunda bu işlevi kullanın.
Örnek:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrlURL çıktısı olması durumunda bu işlevi kullanın (XSS önleme olmadan - yalnızca karakter dönüşümü)
Örnek:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrlURL çıktısı olması durumunda bu işlevi kullanın (XSS önleme ile - karakter sohbeti dahil)
Örnek:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>
count()(örnek echo (int)$var)echo 'test')echo "test")__yöntemBu çeviri amaçlı kullanılır. Bir dizenin çevrilebileceğini bildiğiniz zaman kullanın.
Örneğin:
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>
__()de kaçmalı mıyız ? Her /* @escapeNotVerified */yere yapıştırmaktan biraz yoruldum : /
__güvenlik amaçlı değil, çeviri amaçlıdır
echo $this->escapeHtml(__('Text to translate'))