PHP скрипт, позволяющий найти и заменить текст в фигурных скобочках.
Для примера у нас есть строка:
$str='<p>Текст текст текст текст текст текст текст текст текст {file=http://domain.co/file.txt=name=имя ссылки на файл}</p>
<p>текст текст текст {file=http://domain2.co/file2.txt=name=имя 2 ссылки на файл}</p>
<p>текст текст текст текст текст текст</p>';
Нам понадобится найти и заменить данные в фигурных скобках при помощи PHP. Заменять мы будем на пути к файлу, указанному в этих данных и на название ссылки, которые также указаны там.
Например, нам придется разбить вот эту строку:
{file=http://domain.co/file.txt=name=имя ссылки на файл}
На массив и сделать замену на:
<a target="_blank" href="https://link.inverser.pro/r2?l=http://domain.co/file.txt">имя ссылки на файл</a>
Чтобы это сделать мы будем использовать регулярное выражение и немного рекурсии)
//find files links
//находим все, что лежит в {...}
preg_match_all("|\{([^}]+)|i", $str, $regs);
//$regs - это ответный массив найденных совпадений
//если он не пустой, то ...
if(!empty($regs[1])){
//создадим пустой массив
$findFilesLinks=array();
//пройдемся по массиву с совпадениями
foreach($regs[1] as $z){
$z=explode('=',$z);
//наполним пустой массив данными
array_push($findFilesLinks, array($z[1]=>$z[3]));
}
$out='';
$i=0;
//пройдемся по массиву с полученными данными
foreach ($findFilesLinks as $k=>$v) {
//и еще пройдемся по массиву со значениями массива
foreach ($v as $a=>$q) {
//var_dump($a,$q);
//заменим все совпадения на необходимые нам данные
//в данном примере мы заменяем на ссылку
//где $a - это ссылка
//$q - это название ссылки
//например: {file=https://inverser.pro/file.txt=name=имя ссылки}
$str=str_replace('{'.$regs[1][$i].'}','<span class="in linkIn" onclick="window.open(\'files/?f='.base64_encode($a).'\')">'.$q.'</span>',$str);
};
$i++;
}
}
//\ find files links
В результате выполнения данного скрипта мы получим:
<p>Текст текст текст текст текст текст текст текст текст <span class="in linkIn" onclick="window.open('/files/?f=aHR0cDovL2RvbWFpbi5jby9maWxlLnR4dA==')">имя ссылки на файл</span></p>
<p>текст текст текст <span class="in linkIn" onclick="window.open('/files/?f=aHR0cDovL2RvbWFpbjIuY28vZmlsZTIudHh0')">имя 2 ссылки на файл</span></p>
<p>текст текст текст текст текст текст</p>
Внимание! Если Ваша строка $str УЖЕ содержит фигурные скобки, то в коде замените одинарные фигурные скобки на двойные.
{ >> {{
} >> }}