Теги Ive в следующем формате распространяются по всем элементам контента, включенным в HTML:
<img alt="" src="{assets_2100:{filedir_12}HappyDog.jpg}" style="height:400px; width:100px">
Мне нужно обновить все это в следующем формате либо с помощью функции PHP перед отображением на frontend, либо просто обновить MySQL раз и навсегда:
<img alt="" src="/uploads/HappyDog.jpg" data-assetid="2100" data-filedir="12" data-filename="HappyDog.jpg" style="height:400px; width:100px">
Путь "/uploads/directory" применим для всех изображений!
Эти теги переносились при переносе содержимого из EE
Отредактировано: Хорошо, до сих пор я пробовал следующее как первый шаг, чтобы удалить {filedir_X} из адреса:
$parse_encoded = true;
$pattern = ($parse_encoded)
? '/(?:{|{)filedir_(\d+)(?:}|})/'
: '/{filedir_(\d+)}/';
if (preg_match_all($pattern, $htmlcontent, $matches, PREG_SET_ORDER))
{
foreach ($matches as $match){
$htmlcontent = str_replace($match[0], '', $htmlcontent);
}
}
Затем изменили это, чтобы удалить "{asset", но в итоге "}" в атрибуте "src"!
Поиск совпадений с preg_match_all
для обработки результатов и использования str_replace
- пустая трата времени. PHP имеет две функции для замены регулярных выражений: preg_replace
и preg_replace_callback
(соответственно для простых и сложных замен).
if ( $parseEncoded )
$htmlContent = strtr($htmlContent, ['{' => '{', '}' => '}']);
$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 и строчными буквами.