使用 PHP 替换内部 body

Replacing inside body using PHP

我正在尝试使用 PHP 替换内部 body 标签,但每次我得到的输出都与我预期的不同。

尝试:

$homepage = "<head>https://www.example.com</head> <body>https://www.example.com</body>";
$homepage = substr($homepage, strpos($homepage, "<body>"));
$homepage = preg_replace("/https:\/\/(.?)+\.example\.com/", "https://www.example.net", $homepage);
echo $homepage;

输出:

<head>https://www.example.net</body>

我正在寻找的输出:

<head>https://www.example.com</head> <body>https://www.example.net</body>

我只想change/replace标签里面的字符串。

  1. 分头 & body
  2. 替换 body
  3. 中的字符串
  4. 加入头&body

你的正则表达式有问题,我以为你想同时捕获 https://www.example.comhttps://example.com

这是您要查找的内容:

<?php

$homepage = '<head><link rel="stylesheet" type="text/css" href="https://www.example.com/whatever.css"></head><body>This link <a href="https://www.example.com">https://example.com</a> and this one <a href="https://www.example.com">https://www.example.com</a> will be replaced</body>';

$neck_pos = strpos($homepage, "<body");
$head = substr($homepage, 0, $neck_pos);
$body = substr($homepage, $neck_pos);


$body = preg_replace("/https:\/\/[w]*\.*example\.com/", "https://www.example.net", $body);

$homepage = $head . $body;

echo $homepage;

好吧,重申一下评论中告诉您的内容:不要在 HTML/XML 上使用正则表达式 - 永远不要。始终使用解析器和(最好)xpath 进行搜索。作为第一步,请查看下面的示例 - 您将需要通读整个主题。如果 HTML/XML 变得更复杂,搜索也会变得更复杂:

$homepage = "<head>https://www.example.com</head> <body>https://www.example.com</body>";
$doc = new DOMDocument;
libxml_use_internal_errors(true);
$doc->loadHTML($homepage, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

$xpath = new DOMXPath($doc); 
$target= $xpath->query('//body');
$target[0]->nodeValue="https://www.example.net";
echo $doc->saveHTML();

输出:

<p>https://www.example.com <body>https://www.example.net</body></p>