How do I escape a single quote in Ruby?
escaping, ruby, string
Solution
The reason `sub("'", "\'")` does not work is because `"\'"` is the same as `"'"`. Within double quotes, escaping of a single quote is optional.
The reason `sub("'", "\\'")` does not work is because `"\\'"` expands to a backslash followed by a single quote. Within `sub` or `gsub` argument, a backslash followed by some characters have special meaning comparable to the corresponding global variable. Particularly in this case, the global variable `$'` holds the substring after the last matching point. Your `"\\'"` within `sub` or `gsub` argument position refers to a similar thing. In order to avoid this special convention, you should put the replacement string in a block instead of an argument, and since you want to match not just one, you should use `gsub` instead of `sub`:
gsub("'"){"\\'"}
Problem
I am passing some JSON to a server via a script (not mine) that accepts the JSON as a string. Some of the content of the JSON contains single quotes so I want to ensure that any single quotes are escaped before being passed to the script. I have tried the following: ``` > irb > 1.9.3p194 :001 > x = "that's an awesome string" > => "that's an awesome string" > 1.9.3p194 :002 > x.sub("'", "\'") > => "that's an awesome string" > 1.9.3p194 :003 > x.sub("'", "\\'") > => "thats an awesome strings an awesome string" ``` but can't seem to get the syntax right.