用MySQL查询替换html样式属性

时间:2019-03-22 13:32:41

标签: mysql sql wordpress

我们正在更新现有的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。

4 个答案:

答案 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]*?"