【问题标题】:Mysql search & replace with random charactersMysql搜索并替换为随机字符
【发布时间】:2019-09-18 06:14:12
【问题描述】:

我在文本中有一些网址src="https://example.com/public/images/someimage.jpg?itok=WDGFySy" 我需要在每个 url 中删除这个垃圾令牌?itok=WDGFySy,所有令牌显然都是随机的:)。 我尝试直接在数据库中这样做:

UPDATE wp_posts SET post_content = REPLACE(post_content, 'itok=[[:xdigit:]]{8}', '') WHERE post_content LIKE 'itok=[[:xdigit:]]{8}
';

但我找不到任何这样的令牌。 LIKE this [a-fA-F0-9]{8} 也无济于事。有什么建议吗?感谢您的任何建议。

【问题讨论】:

标签: mysql wordpress search


【解决方案1】:

如果您有 MySQL 8.0,则只能使用正则表达式。

但是,如果您的链接位于单独的字段中,则可以创建并使用 SP 来清理它们:

DELIMITER $$
CREATE FUNCTION CLEANUP(
      aString VARCHAR(255)
    , aName VARCHAR(15)
)
RETURNS VARCHAR(255)
BEGIN
    SET @u = SUBSTRING_INDEX(aString, '?', 1);
    SET @q = SUBSTRING_INDEX(aString, '?', -1);

    IF @q = aString THEN
        RETURN aString; -- no '?' char found
    ELSE
        SET @f = LOCATE(CONCAT(aName, '='), @q);
        SET @query = IF(@f > 1, SUBSTR(@q, 1, @f - 1), '');
        IF @f > 0 THEN
            SET @t = LOCATE('&', @q, @f + LENGTH(aName) + 1);
            IF @t > 0 THEN
                SET @query = CONCAT(@query, SUBSTR(@q, @t + 1));
            END IF;
        END IF;

        IF @query = '' THEN
            RETURN @u;
        ELSE
            RETURN CONCAT(@u, '?', TRIM('&' FROM @query));
        END IF;
    END IF;
END
$$
DELIMITER ;

然后:

SELECT
      CLEANUP('https://example.com/public/images/someimage.jpg?itok=WDGFySy&b=2', 'itok')
    , CLEANUP('https://example.com/public/images/someimage.jpg?itok=WDGFySy', 'itok')
    , CLEANUP('https://example.com/public/images/someimage.jpg?a=1&itok=WDGFySy', 'itok')
    , CLEANUP('https://example.com/public/images/someimage.jpg?a=1&itok=WDGFySy&b=2', 'itok')
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2019-06-14
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多