Замена относительных ссылок внешними ссылками в строке PHP - PullRequest
0 голосов
/ 27 июня 2018

Я работаю с редактором, который работает исключительно с внутренними относительными ссылками для файлов, что прекрасно для 99% того, для чего я его использую.

Однако я также использую его для вставки ссылок на файлы в теле письма, а относительные ссылки не сокращают горчицу.

Вместо того, чтобы изменять редактор, я хотел бы найти строку в редакторе и заменить относительные ссылки на внешние ссылки, как показано ниже

Заменить

files/something.pdf

С

https://www.someurl.com/files/something.pdf

Я придумал следующее, но мне интересно, есть ли лучший / более эффективный способ сделать это с помощью PHP

<?php
$string = '<a href="files/something.pdf">A link</a>, some other text, <a href="files/somethingelse.pdf">A different link</a>';

preg_match_all('/<a[^>]+href=([\'"])(?<href>.+?)\1[^>]*>/i', $string, $result);

if (!empty($result)) {
    // Found a link.
    $baseUrl = 'https://www.someurl.com';
    $newUrls = array();
    $newString = '';

    foreach($result['href'] as $url) {
        $newUrls[] = $baseUrl . '/' . $url;
    }

    $newString = str_replace($result['href'], $newUrls, $string);

    echo $newString;
}
?>

Большое спасибо

Lee

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Вы действительно должны использовать DOMdocument для такой работы, но если вы хотите использовать регулярное выражение, это делает работу:

$string = '<a some_attribute href="files/something.pdf" class="abc">A link</a>, some other text, <a class="def" href="files/somethingelse.pdf" attr="xyz">A different link</a>';
$baseUrl = 'https://www.someurl.com';
$newString = preg_replace('/(<a[^>]+href=([\'"]))(.+?)\2/i', "$1$baseUrl/$3$2", $string);
echo $newString,"\n";

Выход:

<a some_attribute href="https://www.someurl.comfiles/something.pdf" class="abc">A link</a>, some other text, <a class="def" href="https://www.someurl.com/files/somethingelse.pdf" attr="xyz">A different link</a>
0 голосов
/ 27 июня 2018

Вы можете просто использовать preg_replace, чтобы заменить все вхождения файлов, начинающиеся с URL в двойных кавычках:

$string = '<a href="files/something.pdf">A link</a>, some other text, <a href="files/somethingelse.pdf">A different link</a>';

$string = preg_replace('/"(files.*?)"/', '"https://www.someurl.com/$1"', $string);

Результат будет:

<a href="https://www.someurl.com/files/something.pdf">A link</a>, some other text, <a href="https://www.someurl.com/files/somethingelse.pdf">A different link</a>
...