Mir ist bekannt, dass Magento 2 verschiedene Methoden zum Sichern der Vorlage bietet:
$block->escapeHtml()$block->escapeQuote()$block->escapeUrl()$block->escapeXssInUrl()
Aber ich frage mich, wann ich diese Methoden anwenden soll?
Mir ist bekannt, dass Magento 2 verschiedene Methoden zum Sichern der Vorlage bietet:
$block->escapeHtml()$block->escapeQuote()$block->escapeUrl()$block->escapeXssInUrl()Aber ich frage mich, wann ich diese Methoden anwenden soll?
Antworten:
Die Escaping-Methoden in AbstractBlockallen Delegate-Aufrufen an Magento\Framework\Escaper, sodass Sie dort eine Übersicht finden.
Schauen wir uns die öffentlichen Methoden und ihre Dokumentation an:
/**
* 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)
Dies sollte Ihre Standard-Escape-Methode für jede Ausgabe sein. Konvention ist, dass das Ergebnis aller Methoden, die nicht "Html" enthalten, maskiert werden muss.
( seit 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)
Verwenden Sie diese Option, um beispielsweise die Ausgabe in einem HTML-Attribut zu umgehen
title="<?php echo $block->escapeHtmlAttr($title) ?>"
Es wird HTML entkommen, aber auch Anführungszeichen ( ")
Standardmäßig werden auch einfache Anführungszeichen ignoriert, sodass dies auch funktioniert:
onclick="alert('<?php echo $block->escapeHtmlAttr($message) ?>')"
Setzen Sie den zweiten Parameter auf false, wenn dies nicht gewünscht ist.
/**
* Escape URL
*
* @param string $string
* @return string
*/
public function escapeUrl($string)
Dies kann zur Ausgabe von URLs verwendet werden. Es wird die Standard - HTML - escaping und zusätzlich entfernt gelten javascript:, vbscript:und data:. Wenn Sie URLs wie diese in von Benutzern bereitgestellten Links verhindern möchten, können Sie die Methode verwenden.
Bis zu Magento 2.1 war diese Funktion nicht enthalten und Sie mussten escapeXssInUrl()stattdessen verwenden. Es gab keinen Grund, etwas zu benutzen escapeUrl().
Ansonsten einfach $block->escapeHtmlAttr()für URLs verwenden.
( seit Magento 2.2 )
/**
* Encode URL
*
* @param string $string
* @return string
*/
public function encodeUrlParam($string)
Dies wendet die URL-Codierung auf Parameter an. Für interne URLs sollten Sie immer verwenden getUrl(), wenn die URL-Codierung bereits für Sie durchgeführt wurde. Dies ist also nur erforderlich, wenn Sie manuell eine externe URL erstellen.
( seit Magento 2.2 )
/**
* Escape string for the JavaScript context
*
* @param string $string
* @return string
*/
public function escapeJs($string)
Codiert Unicode - Zeichen für JavaScript, beispielsweise ♥wird \u2665. Verwenden Sie diese Option, um die Ausgabe innerhalb eines JS-Strings zu verlassen . Für Inline-Javascript (dh onclickAttribute) müssen Sie immer noch anrufen escapeHtmlAttr().
Beachten Sie json_encode(), dass es in diesem Fall escapeJs()nicht verwendet werden darf , wenn Sie es verwenden.
( seit Magento 2.2 )
/**
* Escape string for the CSS context
*
* @param string $string
* @return string
*/
public function escapeCss($string)
Codiert Unicode-Zeichen für CSS (siehe escapeJs()), die beispielsweise im contentCSS-Attribut verwendet werden sollen.
escapeHtmlAttr()stattdessenescapeUrl()stattdessenescapeHtmlAttr()stattdessenescapeHtmlAttrund escapeHtmlAttrexistiert nicht in 2.1.2 ... zumindest nicht in, es /vendor/magento/framework/Escaper.phpsei denn, sie haben es später hinzugefügt und Magento neu getaggt ..
Dies ist für Magento 2.0. Für 2.1 siehe Fabians Antwort
escapeHtmlVerwenden Sie diese Funktion bei einer String-Ausgabe, die kein HTML enthalten soll.
Beispiel:
<span class='label'><?php echo $block->escapeHtml($block->getLabel()); ?></span>
escapeQuoteVerwenden Sie diese Funktion bei HTML-Attributen
Beispiel:
<span class="<?php echo $block->escapeQuote($block->getSpanClass()); ?>">Description</span>
escapeUrlVerwenden Sie diese Funktion bei einer URL-Ausgabe (ohne XSS-Schutz - nur Zeichenkonvertierung)
Beispiel:
<a href="<?php echo $block->escapeUrl($block->getUrl()); ?>">Link</a>
escapeXssInUrlVerwenden Sie diese Funktion bei einer URL-Ausgabe (mit XSS-Schutz - einschließlich Zeichenkonversation)
Beispiel:
<a href="<?php echo $block->escapeXssInUrl($block->getUrl()); ?>">Link</a>
count()(Beispiel echo (int)$var)echo 'test')echo "test")__MethodeDieser wird für Übersetzungszwecke verwendet. Verwenden Sie diese Option, wenn Sie wissen, dass eine Zeichenfolge übersetzt werden kann.
Beispielsweise:
<caption class="table-caption"><?php /* @escapeNotVerified */ echo __('More Information') ?></caption>
__()? Ich bin es ein bisschen leid /* @escapeNotVerified */überall zu
__ist nicht für Sicherheitszwecke, sondern für Übersetzungszwecke
echo $this->escapeHtml(__('Text to translate'))