php或mysql替换启用html的内容条目中的< img>标记

qybjjes1  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(301)

我的支持html的内容条目中遍布以下格式的标签:

<img alt="" src="{assets_2100:{filedir_12}HappyDog.jpg}" style="height:400px; width:100px">

我需要在前端显示之前通过php函数以以下格式更新所有这些内容,或者只需一次性更新mysql:

<img alt="" src="/uploads/HappyDog.jpg" data-assetid="2100" data-filedir="12" data-filename="HappyDog.jpg" style="height:400px; width:100px”>

“/uploads/”目录路径适用于所有图像!
这些标签是在从ee迁移内容时携带的
edited:好的,到目前为止,我第一步尝试从地址中删除{filedir\ux}:

$parse_encoded = true;
    $pattern = ($parse_encoded)
        ? '/(?:{|&#123;)filedir_(\d+)(?:}|&#125;)/'
        : '/{filedir_(\d+)}/';
    if (preg_match_all($pattern, $htmlcontent, $matches, PREG_SET_ORDER))
    {
        foreach ($matches as $match){
            $htmlcontent = str_replace($match[0], '', $htmlcontent);
        }
    }

然后修改它以删除“{asset”,但在“src”属性处以“}”结束!

w3nuxt5m

w3nuxt5m1#

搜索匹配项 preg_match_all 循环结果并使用 str_replace 是浪费时间。php有两个用于正则表达式字符串替换的函数: preg_replace 以及 preg_replace_callback (分别用于简单和复杂的替换)。

if ( $parseEncoded )
    $htmlContent = strtr($htmlContent, ['&#123;' => '{', '&#125;' => '}']);

$pattern = '~src=\K(["\']?){assets_(\d+):{filedir_(\d+)}([^}]+)}\1~i';
$replacement = '"/uploads/$4" data-assetid="$2" data-filedir="$3" data-filename="$4"';

$htmlContent = preg_replace($pattern, $replacement, $htmlContent);

注意,我更改了变量名:您必须在camelcase、snake\u case和小写之间进行选择。

相关问题