用MySQL查询替换html样式属性

问题描述 投票:0回答:4

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

mysql sql wordpress
4个回答
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


0
投票

你在WordPress,所以我可以假设你有一些PHP技能吗?如果是这样,你可以使用类似simpleXML的东西来扫描所有页面,并使用递归循环遍历所有的子标签。或者,您可以加载Javascript / jQuery脚本,删除所有样式属性onload。你可以有MySQL查询这样做,但我认为这会更冒险。使用simpleXML和Javascript方法,您可以限制删除的范围。通过MySQL中的查找和替换,它在页面的DOM和页面中都是无限的。

我对正则表达式并不擅长,但也许如果这是你想要的,请看这里qazxsw poi


0
投票

其实很容易。你可以设置默认样式,并从mysql更新变量中获取一个:

How to do a regular expression replace in MySQL?

编辑:我实际上没有正确阅读,并跳过它是关于WP。因为它总有一天能帮助我将这个答案打开。


0
投票

重要的是懒惰的量词:<?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]*?"

© www.soinside.com 2019 - 2024. All rights reserved.