簡體   English   中英

更改 img 標簽的 src 部分

[英]Change the src part of an img tag

我有一個包含 html 代碼的字符串,我想在每次出現在字符串中時將<img src="anything.jpg">更改為<img src="'.DOC_ROOT .'anything.jpg"> 我真的希望使用HTML解析器,因為這將是我將使用它的唯一的事情。 有誰知道如何在 php 中做到這一點,例如使用正則表達式?

確實應該使用解析器,但由於您明確表示您真的不想這樣做,您可以使用以下正則表達式替換

$string = preg_replace('/<img([^>]*)src=["\']([^"\'\\/][^"\']*)["\']/', '<img\1src="'.DOC_ROOT.'\2"', $string);

演示 此正則表達式不會修改任何已經是相對路徑的 url。 如果您確實想匹配這些,請將其更改為以下內容:

$string = preg_replace('/<img([^>]*)src=["\']["\'\\/]?([^"\']*)["\']/', '<img\1src="'.DOC_ROOT.'\2"', $string);

演示

如果您絕對必須使用正則表達式而不是 DOM 解析器,則可以使用它。

不確定 DOC_ROOT 來自哪里,因為它不是一個有效的 PHP 變量(可能是一個常量?)。 另請注意,如果您有單引號,您將無法在字符串中使用嵌入變量。

你可能想要更像:

img.*?src=['"](.*?)['"]

替換為:

img src="$_SERVER['DOCUMENT_ROOT']$1"

其中轉換:

echo "<img src='anything.jpg'>"; //into:
echo "<img src='$_SERVER[\'DOCUMENT_ROOT\']/anything.jpg'>";

http://regex101.com/r/vN7lN9

在 php 中,代碼如下所示:

$string = "<img src='anything.jpg'>";
echo preg_replace('/img.*?src=[\'\"](.*?)[\'\"]/', "img src='$_SERVER[DOCUMENT_ROOT]/$1'", $string);

請注意,如果您的 DOM 包含不規則的 HTML(標簽錯位, =符號之間有空格),您最終可能會導致很多問題。 這就是像這樣的 DOM 解析器派上用場的地方。

很多人都說使用 DOM 解析器的重要性,但真正展示如何執行任務的答案太少了。

Regex ,即使很想寫一個單行或更改單個字符,也不適合解析 html,因為它是 DOM 無知的——它將您的輸入視為字符串,僅此而已。 我精心制作了一個正則表達式(來自接受的答案)將如何進行意外替換的演示。

代碼:(演示

$html = <<<HTML
<p>Some random text <img src="anything.jpg"> text <iframe data-whoops="<img" src="anything.jpg"></iframe></p>
HTML;

define('DOC_ROOT', 'www.example.com/');

echo "With regex:\n";
echo preg_replace('/<img([^>]*)src=["\']([^"\'\\/][^"\']*)["\']/', '<img\1src="'.DOC_ROOT.'\2"', $html);

echo "\n\n---\n\nWith a parser:\n";

$dom = new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
foreach ($dom->getElementsByTagName('img') as $img) {
    $img->setAttribute('src', DOC_ROOT . $img->getAttribute('src'));
}
echo $dom->saveHTML();

輸出:

With regex:
<p>Some random text <img src="www.example.com/anything.jpg"> text <iframe data-whoops="<img" src="www.example.com/anything.jpg"></iframe></p>

---

With a parser:
<p>Some random text <img src="www.example.com/anything.jpg"> text <iframe data-whoops="&lt;img" src="anything.jpg"></iframe></p>

如果您需要對 img 標簽的 url 進行條件替換,還有其他工具,如 url 解析器或 Xpath,可以實現以滿足您的要求。

https://stackoverflow.com/a/60263813/2943403

最后,我的建議是忘記你寫了多少行代碼; 只需編寫健壯/可靠的代碼。

這就是你要找的,我想:

$pictureName = 'anything.jpg';

$html = str_replace($pictureName, DOC_ROOT.$pictureName, $html);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM