我在我正在开发的应用程序中犯了一个错误,结果发现有一些文本有多次双引号转义,类似这样的
我们将从构建酒吧的正面和侧面开始。我们 将首先使用正面和侧面创建框架 2 \\\\\\\\" x 4 \\\\\\\\#34;然后将保护粒子 框架上的板面板。这个项目的标准是 42 \\\\\\\\"高大的60岁。\\\\\\\#34;广泛的 40 \\\\\\\\"深。你将在这里钻几个螺丝 项目。为了使这个过程更容易 - 首先钻孔导孔 使用Dremel旋转工具和150的螺丝在框架中拧紧 1/8 \\\\\\\\"钻头。
我正在寻找一种在数据库中进行更新的方法,可以快速删除所有这些斜杠,到目前为止我的想法是使用正则表达式,例如
for each($records as $record){
$record->description = preg_replace(*/some patter here/*, $record->description);
$record->save();
}
但是我很难找到正确的模式,所以也许有人可以帮忙解决这个问题,或者如果有更简单或更好的方法来更新这些记录,我真的很感激任何帮助!
答案 0 :(得分:1)
您几乎不应该在数据库中存储反斜杠转义的内容。要清理它们,你可能想要这样的东西:
preg_replace( "/\\\\{2,}/", "", $record->description );
这将用空字符串替换2个或更多反斜杠的序列。如果有必要,你可以使它更具体 - 这样它只会匹配那些反斜杠序列,后跟双引号字符:
preg_replace( '/\\\\{2,}"/', '"', $record->description );
如果你想通过PHP来做这件事。您的数据库引擎可能具有内置的正则表达式替换功能,该功能允许您仅使用查询执行更新,如果这很重要,可能会提高性能。模式可能会相同。
我刚注意到你的MySQL标签。显然MySQL没有内置的正则表达式替换功能。见How to do a regular expression replace in MySQL?
我的建议是完全摆脱反斜杠转义然后在输出时根据需要转义,除非有充分的理由存储转义的内容。您当然可以更改替换字符串,以使用单个反斜杠或任何您想要的替换这些序列。
答案 1 :(得分:1)
preg_replace("/([\\]){2,}/", "\\", $record->description);
应该这样做。