Замена PHP или MySQL для тегов <img>в записях содержимого с поддержкой HTML - PullRequest
0 голосов
/ 24 мая 2018

У меня есть теги в следующем формате, разбросанные по всем записям контента с поддержкой 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

Отредактировано: Хорошо, пока я попробовал следующее в качестве первого шага для удаления {filedir_X} с адреса:

    $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»!

1 Ответ

0 голосов
/ 24 мая 2018

Поиск совпадений с 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_caseи строчные.

...