我想逃避所有未被转义的双引号。如何避免彼此之间的报价?
我使用real_escape_string()了,但我想知道什么是错与后续的正则表达式/方法:
$str = '"Hello "" """ world!\"';
preg_replace('/(^|[^\\\\]{1})\"/', '${1}\"', $str);
(PS:我知道 - \\”将不进行转义,并且可能在其他一些情况下一个问题,但这个不要紧,我的脚本)
结果是:
\"Hello \"" \""\" world!\"
但我想它是:
\"Hello \"\" \"\"\" world!\"
对于一个SQL插入,你不应该在任何情况下推出你自己的转义**。改用参数化查询。 –
这是一个糟糕的主意,但是你可以这样做的一个快速方法是:1)用一个未转义的引用替换所有的转义引号,然后2)用转义的引号替换所有未转义的引号:'str_replace (array('\'','''),array(''','''),$ str);' – nickb
@WaleedKhan:谢谢你的建议,通常我不会。虽然在这种情况下,可能会弄乱任何东西的唯一字符是双引号 - 寻找一个快速解决方案。 –