# Escaping HTML Attributes Escaping data in **HTML Attribute** contexts is most often done incorrectly, if not overlooked completely by developers. Regular [HTML escaping](escaping-html.md) can be used for escaping HTML attributes *only* if the attribute value can be **guaranteed as being properly quoted**! To avoid confusion, we recommend always using the HTML Attribute escaper method when dealing with HTTP attributes specifically. To escape data for an HTML Attribute, use `Zend\Escaper\Escaper`'s `escapeHtmlAttr()` method. Internally it will convert the data to UTF-8, check for its validity, and use an extended set of characters to escape that are not covered by `htmlspecialchars()` to cover the cases where an attribute might be unquoted or quoted illegally. ## Examples of Bad HTML Attribute Escaping An example of incorrect HTML attribute escaping: ```php Single Quoted Attribute
?> What framework are you using?
``` In the above example, the default `ENT_COMPAT` flag is being used, which does not escape single quotes, thus resulting in an alert box popping up when the `onmouseover` event happens on the `span` element. Another example of incorrect HTML attribute escaping can happen when unquoted attributes are used (which is, by the way, perfectly valid HTML5): ```php Quoteless Attribute
?> > What framework are you using?
``` The above example shows how it is easy to break out from unquoted attributes in HTML5. ## Example of Good HTML Attribute Escaping Both of the previous examples can be avoided by simply using the `escapeHtmlAttr()` method: ```php escapeHtmlAttr($input); ?> Quoteless Attribute
?> > What framework are you using?
``` In the above example, the malicious input from the attacker becomes completely harmless as we used proper HTML attribute escaping!