Rails html_safe Cheat Sheet

By ScreenStaring

Rails uses ActiveSupport::SafeBuffer to prevent cross-site scripting attacks. But when a string will or won’t be escaped can be confusing. Part of this confusion stems from when the unsafe string is actually escaped.

After doing some heavy #html_safe work we thought it would be helpful to create a cheat sheet containing the most common use cases.

Cheat sheet entries reference the following variables:

safe   = "<a href='#foo'>click here</a>".html_safe
unsafe = "<script>someMeanJavaScript()</script>"
Operation Result is html_safe? Notes
safe << unsafe true unsafe is escaped immediately
safe += unsafe true unsafe is escaped immediately
unsafe << safe false escaped when view is rendered
unsafe += safe false escaped when view is rendered
"Amaaaaaazing content: #{safe}" false escaped when view is rendered
safe.to_s true
safe.to_str false More on #to_str
safe.safe_concat(unsafe) raises a SafeConcatError
safe.safe_concat("foo".html_safe) true