Qaflanti的答案是正确的,但我想m让它更完整,如果你想逃避单引号和双引号。
第一种选择:
function escape_quotes($string) {
return preg_replace("/(^|[^\\\\])(\"|')/","$1\\\\$2", $string);
}
输入
我爱\ “carots \”,而是 “我” 不喜欢\ '樱桃\'
输出
我爱\ “carots \”,但是\ “I \” 唐\ '吨像\' 樱桃\”
说明:
的\
有在引用的表达式中有特殊含义,并且会在字符串中转义下面的字符,所以虽然您需要在正则表达式中编写\\
以搜索反斜杠字符,但在PHP中,您还需要转义这两个反斜杠,总共4个反斜杠。
考虑到这一点
所以,第一个捕获组,然后搜索单个字符不是反斜线(而不是两个或四个反斜杠具有误导性,因为它是)
第二个捕获组将搜索双倍或单引号 恰好一次。
因此,这会找到未转义的引号(双精度和单精度)并在引号之前添加一个反斜杠,从而转义它。
第二个选项:
或者,它可能只是对你最好将它们转换为HTML从一开始就实体:
function htmlentities_quotes($string) {
return str_replace(array('"', "'"), array(""", "'"), $string);
}
然后你只需要使用php函数htmlspecialchars_decode($string);
将其恢复为原来的样子。
输入
我爱 “carots”,而是 “我” 不喜欢 '樱桃'
输出
我爱"
carots "
但"
I "
don '
像 '
樱桃'
如果存在具有多于2个反斜线的可能性吨,可以考虑使用一个递归函数,并用'strpos检查()'。 – Mave