我们正在更新现有的WordPress网站并将帖子从一个站点导入到另一个站点。在旧网站上,我们使用了WYSIWYG编辑器,所有帖子都嵌入了样式
例:
<p style="margin: 6px 0px; color: rgb(20, 24, 35); font-family: helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; line-height: 19.3199996948242px; background-color: rgb(255, 255, 255);">
<span style="font-family: helvetica, arial, 'lucida grande', sans-serif; font-size: 14px; letter-spacing: 0.4pt; line-height: 19.3199996948242px;">Content</span>
</p>
预期产量:
<p>
<span>Content</span>
</p>
现在我正在寻找一种从html元素中删除样式标记的方法。 Self我在考虑MySQL查询,但很难弄清楚如何在其中进行preg_replace。
如果要在数据库级别执行迁移,我建议您在post
表中添加一个新列,以便首先创建旧数据的副本,然后比较迁移脚本的结果。添加新列后,可以使用REGEXP_REPLACE
作为UPDATE的一部分将数据复制到新列中。您可能必须更改正则表达式语法,以便它捕获您在“样式”部分中遇到的所有字符,但这可能是一个开始:
UPDATE
post_table
SET
stripped_text = regexp_replace(original_text,
' style="[[:alnum:][:digit:][:space:];,:\(\)\'\-\.]+"', '')
检查数据并查看结果是否正常,重复直到结果足够好。将原始帖子列(我的示例中的“original_text”)重命名为“orignal_backup”,并将新列(我的示例中为“stripped_text”)重命名为原始帖子列的名称。
有关MySQL REGEX中字符类的更多信息,请访问here。
你在WordPress,所以我可以假设你有一些PHP技能吗?如果是这样,你可以使用类似simpleXML的东西来扫描所有页面,并使用递归循环遍历所有的子标签。或者,您可以加载Javascript / jQuery脚本,删除所有样式属性onload。你可以有MySQL查询这样做,但我认为这会更冒险。使用simpleXML和Javascript方法,您可以限制删除的范围。通过MySQL中的查找和替换,它在页面的DOM和页面中都是无限的。
我对正则表达式并不擅长,但也许如果这是你想要的,请看这里qazxsw poi
其实很容易。你可以设置默认样式,并从mysql更新变量中获取一个:
How to do a regular expression replace in MySQL?
编辑:我实际上没有正确阅读,并跳过它是关于WP。因为它总有一天能帮助我将这个答案打开。
重要的是懒惰的量词:<?php
$NewStyle=' style="background-color: red;"';
//your query to get style
$NewStyle=' style="'.$row['style'].'"';// if some query conditions - example: background-color: blue
<div '.$NewStyle.'></div>
?>
在MySQL中,您需要添加一个额外的反斜杠:style="[\d\D]*?"