我们正在更新现有的WordPress网站,并将帖子从一个站点导入另一个站点。在旧网站上,我们使用了所见即所得的编辑器,并且所有帖子都嵌入了样式
示例:
<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元素中删除样式标签的方法。自我,我当时在考虑一个MySQL查询,但是很难弄清楚如何在其中进行preg_replace。
答案 0 :(得分:2)
如果要在数据库级别执行迁移,我建议向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。
答案 1 :(得分:0)
实际上很容易。您可以设置默认样式,并从mysql更新变量中获取一种样式:
<?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>
?>
编辑:我实际上没有正确阅读,并跳过了有关WP的内容。由于仍然有帮助的一天,我将保留此答案。
答案 2 :(得分:0)
您使用的是WordPress,所以我可以假设您具备一些PHP技能吗?如果是这样,您可以使用simpleXML之类的东西来扫描所有页面,并让循环遍历let say or的所有子标签。或者,您可以加载一个Javascript / jQuery脚本,该脚本会在加载时删除所有样式属性。您可以使用MySQL查询来执行此操作,但我认为这样做会更加冒险。使用simpleXML和Javascript方法,可以限制删除范围。在MySQL中进行查找和替换后,页面和页面的DOM都将不受限制。
我对Regexp不太满意,但是如果这正是您想要的,请看这里 How to do a regular expression replace in MySQL?
答案 3 :(得分:0)
重要的是懒惰的量词:
style="[\d\D]*?"
在MySQL中,您需要添加一个额外的反斜杠:style="[\\d\\D]*?"