Data escaping helps keep your website safe by cleaning output before showing it. It stops bad code from running on your site.
Data escaping (output) in Wordpress
esc_html( $data ) esc_attr( $data ) esc_url( $url ) esc_js( $data )
esc_html() cleans text for safe HTML output.
esc_attr() cleans data for HTML attributes like title or alt.
echo esc_html( $user_input );
echo '<a href="' . esc_url( $link ) . '">Click here</a>';
echo '<input type="text" value="' . esc_attr( $value ) . '">';
This example shows how to safely display user input, URLs, and attribute values using WordPress escaping functions. It prevents harmful scripts from running and keeps HTML valid.
<?php // Simulate user input with special characters $user_input = '<script>alert("hack")</script> Hello!'; $link = 'javascript:alert(1)'; $value = 'O\'Reilly & Co.'; // Safe output using escaping functions ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Data Escaping Example</title> </head> <body> <h1>Escaped User Input:</h1> <p><?php echo esc_html($user_input); ?></p> <h2>Safe Link:</h2> <a href="<?php echo esc_url($link); ?>">Click me</a> <h2>Input Value:</h2> <input type="text" value="<?php echo esc_attr($value); ?>"> </body> </html>
Always escape data right before output, not before storing it.
Use the right escaping function for the context: HTML content, attributes, URLs, or JavaScript.
Escaping helps protect your site from security risks like cross-site scripting (XSS).
Data escaping cleans output to keep your site safe.
Use esc_html(), esc_attr(), and esc_url() depending on where data goes.
Always escape data when showing it, especially if it comes from users or external sources.
Practice
esc_html() in WordPress?Solution
Step 1: Understand what data escaping does
Data escaping cleans output by converting special characters to safe ones to prevent harmful code execution.Step 2: Identify the purpose in WordPress context
WordPress uses escaping functions to protect the site from security risks like cross-site scripting (XSS).Final Answer:
To clean output and protect the site from harmful code -> Option AQuick Check:
Data escaping = Protect site [OK]
- Thinking escaping speeds up the site
- Confusing escaping with styling
- Believing escaping stores data securely
Solution
Step 1: Identify the correct escaping function for URLs
WordPress providesesc_url()specifically to clean URLs before output.Step 2: Compare with other functions
esc_html()is for HTML content,esc_attr()for attributes, andsanitize_text_field()is for input sanitizing, not output escaping.Final Answer:
echo esc_url($url); -> Option BQuick Check:
Escape URL with esc_url() [OK]
- Using esc_html() for URLs
- Using sanitize_text_field() for output escaping
- Not escaping URLs at all
$user_input = '<script>alert(1)</script>'; and we run echo esc_html($user_input);?Solution
Step 1: Understand what esc_html() does to special characters
It converts special HTML characters like <, > to their safe encoded forms (<, >).Step 2: Apply escaping to the input string
The input already has < and > but esc_html() will convert the ampersands (&) to &, so the output becomes <script>alert(1)</script>.Final Answer:
<script>alert(1)</script> -> Option CQuick Check:
esc_html() encodes & to & [OK]
- Assuming esc_html() outputs raw HTML
- Ignoring double escaping of &
- Confusing esc_html() with esc_attr()
echo $user_name; where $user_name comes from user input. What is the problem and how to fix it?Solution
Step 1: Identify the security risk
Outputting user input directly can cause security issues like XSS attacks.Step 2: Choose the correct escaping function for HTML output
Since the output is HTML content,esc_html()is the proper function to escape special characters safely.Final Answer:
Missing escaping, fix with echo esc_html($user_name); -> Option DQuick Check:
Escape user input with esc_html() for HTML output [OK]
- Not escaping user input at all
- Using esc_url() for plain text
- Using sanitize_text_field() only sanitizes input, not escapes output
<a href="...">. Which is the best way to escape it to keep your site safe and valid?Solution
Step 1: Understand context of output
The URL is inside an HTML attribute (href), so it needs URL-specific escaping and validation.Step 2: Choose correct escaping function for URL attributes
esc_url()sanitizes URL schemes (e.g., strips javascript:) and escapes for safe HTML attribute output.Step 3: Why not esc_attr()?
esc_attr()only escapes HTML chars but allows dangerous schemes like javascript:alert(1), leading to XSS.Final Answer:
echo esc_url($user_url); -> Option AQuick Check:
esc_url() for href attributes [OK]
- Using esc_attr() which doesn't validate URL schemes
- Using esc_html() for attributes
- Double escaping with esc_url(esc_attr())
Ready to prove it?
Pass the test and this pattern moves unknown
