Catalog
fauziyasin-s2m4qw/devtools-unicode-escaping

fauziyasin-s2m4qw

devtools-unicode-escaping

Guidelines for escaping strings and handling user-controlled data in DevTools to prevent layout bleed-through, XSS, and security issues.

v1.0LATEST
NewUpdated Oct 20, 2026

Unicode Escaping and User-Controlled Data Guidelines

When displaying inspected data, user-controlled strings, or untrusted input in the DevTools UI (e.g., console messages, object properties, DOM tree nodes, or UI titles/descriptions), you must ensure they are properly escaped to prevent layout bleed-through (such as Right-to-Left leaks) or security vulnerabilities.

DevTools provides two primary Unicode escaping functions in Platform.StringUtilities:

1. Escaping for Text Representation (escapeUnicodeAsText)

Use Platform.StringUtilities.escapeUnicodeAsText(content) when rendering values that developers need to inspect (e.g. string values inside the Console or the Object properties view) where hidden, invisible, or formatting characters should be made explicitly visible.

  • Behavior: Escapes all formatting and surrogate characters into literal Unicode escape sequences (e.g., \u202E, \u200B).
  • Example Usage:
    const text = Platform.StringUtilities.escapeUnicodeAsText(JSON.stringify(description));
    

2. Escaping for UI Rendering (safeEscapeUnicode)

Use Platform.StringUtilities.safeEscapeUnicode(content) when rendering content inside templates or HTML markup where you want safe layout-critical zero-width formatting characters to function normally for word wrapping or rendering layout, but want to escape dangerous layout-disrupting characters (like bidi overrides).

  • Behavior: Escapes dangerous formatting and surrogate characters (like \u202E), but leaves safe formatting characters untouched:
    • Zero Width Space (\u200B)
    • Zero Width Non-Joiner (\u200C)
    • Zero Width Joiner (\u200D)
  • Example Usage: Used automatically by the global Lit template wrapper.

3. Global Lit Template Wrapper

DevTools wraps Lit's default html function inside front_end/ui/lit/strip-whitespace.ts (re-exported via ui/lit/lit.js). This wrapper automatically intercepts and escapes standard string values using Platform.StringUtilities.safeEscapeUnicode(val) at runtime.

  • What is escaped automatically: Any standard string interpolated directly in a template (e.g., html${myString}``).
  • Array items: Array values are traversed recursively, and string elements inside arrays are escaped automatically.
  • Lit directives: Directives (like ifDefined, live, repeat, classMap, etc.) are automatically traversed, and any string arguments inside their values array are escaped recursively.

Directives Rule:

Because the wrapper automatically processes directive arguments, you do not need to manually escape strings passed to standard Lit directives. They will be handled safely at runtime.

Correct Example:

title=${ifDefined(tooLong ? undefined : description)} // Automatically escaped!

4. Manual DOM Assignments & Non-Lit Rendering

Any manual assignments that bypass Lit entirely (e.g., setting element.textContent, element.title, or constructing DOM elements imperatively) will also bypass the Lit wrapper.

  • Always wrap user-controlled strings in these contexts with the appropriate escaping helper:
    • Use escapeUnicodeAsText if you want hidden characters to display as text (e.g., showing \\u202E).
    • Use safeEscapeUnicode if you want zero-width spaces to function but other dangerous characters to be escaped.

Correct Example:

nameElement.textContent = Platform.StringUtilities.escapeUnicodeAsText(name);

Overall Score

87/100

Grade

A

Excellent

Grades are signals, not a certification. Always review a skill yourself before use.

Safety

92

Quality

88

Clarity

90

Completeness

78

Summary

Guidelines for safely escaping and rendering user-controlled strings in Chrome DevTools UI to prevent layout bleed-through and XSS vulnerabilities. The skill documents two escaping functions (`escapeUnicodeAsText` and `safeEscapeUnicode`), explains how the global Lit template wrapper handles automatic escaping, and provides guidance for manual DOM assignments.

Detected Capabilities

Unicode escapingXSS preventionDOM text renderingString sanitizationLit template interpolation

Trigger Keywords

Phrases that agents use to match this skill to user intent.

unicode escapingrtl bidi preventiondevtools xss protectionstring sanitizationconsole output safety

Use Cases

  • Escape user-controlled strings in console output to prevent RtL bidi override attacks
  • Render untrusted DOM properties and node values safely in the DevTools inspector
  • Handle string interpolation in Lit templates without manual escaping
  • Prevent layout bleed-through and XSS when displaying external data in DevTools UI
  • Correctly escape hidden Unicode characters for developer visibility

Quality Notes

  • Clear separation of two escaping strategies with explicit use case guidance
  • Concrete code examples for both correct usage and anti-patterns
  • Well-structured documentation with logical flow from general to specific
  • Explains automatic escaping behavior of Lit wrapper, reducing cognitive overhead for developers
  • Covers edge cases like array traversal and directive arguments
  • Well-organized with numbered sections and subsection structure for readability
Model: claude-haiku-4-5-20251001Analyzed: Oct 20, 2026

Reviews

Add this skill to your library to leave a review.

No reviews yet

Be the first to share your experience.

Use fauziyasin-s2m4qw/devtools-unicode-escaping in your dev environment

Command Palette

Search for a command to run...