I have this line in a javascript block in a page:
res = foo('<%= @ruby_var %>');
What is the best way to handle the case where @ruby_var has a single-quote in it? Else it will break the js code.
I have this line in a javascript block in a page:
res = foo('<%= @ruby_var %>');
What is the best way to handle the case where @ruby_var has a single-quote in it? Else it will break the js code.
@ruby_var.gsub(/[']/, '\\\\\'')
That will escape the single quote with an apostrophe, keeping your Javascript safe!
Also, if you're in Rails, there are a bunch of Javascript-specific tools.
I think I'd use a ruby JSON library on @ruby_var to get proper js syntax for the string and get rid of the '', fex.:
res = foo(<%= @ruby_var.to_json %>)
(after require "json"'ing, not entirely sure how to do that in the page or if the above syntax is correct as I havn't used that templating language)
(on the other hand, if JSON ever changed to be incompatible with js that'd break, but since a decent amount of code uses eval() to eval json I doubt that'd happen anytime soon)
Could you just put the string in a double-quote?
res = foo("<%= @ruby_var %>");
I don't work with embedded Ruby too much. But how about using p
(which invokes inspect
) instead of <%=
which might be doing something like print
or puts
. p
always prints the string as if it were code wrapped in double quotes:
>> p "String ' \" String"
"String ' \" String"
# => nil
>> p 'alpha " \' alpha'
"alpha \" ' alpha"
# => nil
You can also use inspect assuming you know it'll be a single quote:
res = foo(<%= @ruby_var.inspect %>);