The general rule, at least as espoused by Mark Jaquith, is sanitize on input, escape on output (the corollary to this rule being sanitize early, escape late).
So: use sanitization filters (such as the kses() family) when storing untrusted data in the database, and use escaping filters (i.e. the esc_*() family) when outputting untrusted data in the template.
Related Posts:
- why is esc_html() returning nothing given a string containing a high-bit character?
- What characters do I need to escape in XML documents?
- What characters must be escaped in HTML 5?
- How can I selectively escape percent (%) in Python strings?
- How do I escape a single quote in jQuery?
- Escape Character in SQL Server
- How to escape apostrophe (‘) in MySql?
- How to prevent escaping when saving HTML code in an option value?
- Escaping and sanitizing SVGs in metabox textarea
- Sanitize and data validation with apply_filters() function
- What’s the difference between esc_* functions?
- How to correctly escape query variables to be used in WP_Query
- How to escape custom css?
- esc_attr / esc_html / esc_url in echos
- When do I need to use esc_html()? [duplicate]
- Escaping WP_Query tax_query when term has special character(s)
- what’s different between esc_attr, htmlspecialchars and htmlentities
- Allow all attributes in $allowedposttags tags
- When outputting a static string to the page, is it necessary to escape the output?
- Escape hexadecimals/rgba values
- How Flexible are the WordPress Coding Standards for PHPCS?
- Sanitizing comments or escaping comment_text()
- How to properly escape a translated string?
- Must I serialize/sanitize/escape array data before using set_transient?
- Sanitizing, Validating and Escaping in WordPress (Plugin)
- How Could I sanitize the receive data from this code
- How to sanitize user input?
- Which escape function to use when escaping an email or plain text?
- WP_Editor – Saving Value into Plugin Option – Stripping HTML
- What is the safe way to print tracking code / pixel code before tag or tag
- Translate a Constant while appeasing WordPress PHPCS
- Using esc_url() on a url more than once
- Do I need to escape get_theme_mod(‘url’) / (‘mail’) with esc_url?
- How to allow   with wp_kses()?
- Using esc_attr_e
- Why esc_html_() is not used on every text that has a translation (on Twenty Twenty One)?
- Escaping crashes my output
- How to escape html generate by a loop
- How to safely escape the title attribute
- Do we need to escape data that we receive from theme options?
- How to safely escape data that contains HTML attributes
- Can wp_strip_all_tags be used as a substitute for esc_url, esc_attr & esc_html?
- Echoing a URL to a link
- wp_kses_post escaping doesn’t appear to work as described?
- file_get_contents | escaping doesnt show the page
- Help about Escaping
- How to keep specific tag from an html string?
- How to use wp_filter_oembed_result?
- Escaping WP_Query tax_query when term has special character(s)
- Escaping and sanitization
- Escaping WP_Query tax_query when term has special character(s)
- Escaping Issues
- Escaping and Special Characters (e.g. &)
- Escaping data from database (users table) is necessary?
- Escaping get_option( ‘time_format’ ) is nesserary?
- esc_url, esc_url_raw or sanitize_url?
- how to sanitizing $_POST with the correct way?
- How should esc_url be combined with trailingslashit?
- Correct way of using esc_attr() and esc_html()
- Uses for the ‘"’ entity in HTML
- How is \\n and \\\n interpreted by the expanded regular expression?
- Why shouldn’t `'` be used to escape single quotes?
- Unrecognized escape sequence for path string containing backslashes
- In Which Contexts are Plugins Responsible for Data Validation/Sanitization?
- wordpress sanitize array?
- When to use esc_html and when to use sanitize_text_field?
- Does WordPress sanitize arguments to WP_Query?
- Shortcode putting html such as
- How to properly sanitize strings without $wpdb->prepare?
- Is there an equivalent of the PHP function sanitize_key in Gutenberg?
- Whats the safest way to output custom JavaScript and Css code entered by the admin in the Theme Settings?
- wp_specialchars and wp_specialchars_decode in a shortcode plugin
- Sanitizing search data for use with WP_Query
- Filter string like a slug
- Change filename during upload
- Preserve old values on error in setting API
- Post Content, Special Characters and Filters
- Data sanitization for user registration and user login
- Updating post data on save (save_post vs wp_insert_post_data)
- mysql_real_escape_string() vs. esc_sql() in WordPress
- WordPress messes up with data attributes in shortcode output
- textarea field is getting escaped for some unknown reason
- Allow HTML in Settings API input field
- Input sanitation
- WP_Customize_Manager: How to get control ID
- How to use checked() function with multiple check box group? How to properly sanitize that checkbox group?
- escape html in jQuery for WordPress
- echo cutom css code to WordPress page template file ? is this safe?
- Sanitize WordPress Array Input?
- How to save Checkbox-Options in Plugin Options Page
- Remove pre and code tags from WordPress
- Correct form of escaping and localization – functions.php breadcrumbs
- wp_kses allow checkbox class and checked
- Comparing pre-saved post_title to post-saved post_title
- How to display post meta data in secure manner
- Settings api sanatize callback not being triggered
- Sanitizing a custom query’s clauses
- wp_set_object_terms() without accents
- How can I properly sanitize the update_option in WordPress?
- What is the proper way to sanitize $_POST and $_GET vars?