Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-';包装'&书信电报;a>;标记任何<;img>;字符串中的标记_Php_Preg Replace_Domdocument - Fatal编程技术网

PHP-';包装'&书信电报;a>;标记任何<;img>;字符串中的标记

PHP-';包装'&书信电报;a>;标记任何<;img>;字符串中的标记,php,preg-replace,domdocument,Php,Preg Replace,Domdocument,我需要在一个字符串中获取任何img标记,并在其周围添加一个a标记 例如 $content=“单击以获取更多信息”; 将需要替换为 "Click for more info <a href=\"http://www.domain.com/1.jpg\"<img src="\http://www.domain.com/1.jpg\"" /></a>"; “点击查看更多信息”; 我当前的脚本是: $content = $row_rsGetStudy['content

我需要在一个字符串中获取任何img标记,并在其周围添加一个a标记

例如

$content=“单击以获取更多信息”;
将需要替换为

"Click for more info <a href=\"http://www.domain.com/1.jpg\"<img src="\http://www.domain.com/1.jpg\"" /></a>";
“点击查看更多信息”;
我当前的脚本是:

$content = $row_rsGetStudy['content'];

$doc = new DOMDocument();
$doc->loadHTML($content);
$imageTags = $doc->getElementsByTagName('img');

foreach($imageTags as $tag) {
    $content = preg_replace("/<img[^>]+\>/i", "<a href=\"$tag\"><img src=\"$tag\" /></a>", $content); 
}

echo $content
$content=$row\rsGetStudy['content'];
$doc=新的DOMDocument();
$doc->loadHTML($content);
$imageTags=$doc->getElementsByTagName('img');
foreach($imageTags作为$tag){
$content=preg\u replace(“/]+\>/i”,”,$content);
}
echo$内容
这给了我以下错误: 可捕获的致命错误:类DomeElement的对象无法转换为字符串


有没有关于我哪里出错的想法?

使用DOM方法,类似这样的方法(未经测试,自行调试;p)


$content是无法转换为字符串的对象。
要测试它,请使用
var\u dump($content)
你不能直接回应它。

使用DOM提供的属性和方法,您可以从这里获得:

getElementsByTagName
返回包含所有匹配元素的DOMNodeList对象。所以$tag在这里是DOMNodelist::item,因此不能直接用于字符串操作。您需要获得
nodeValue
。按如下方式更改foreach代码:

foreach($imageTags as $tag) {
    $content = preg_replace("/<img[^>]+\>/i", "<a href=\"$tag->nodeValue\"><img src=\"$tag->nodeValue\" /></a>", $content); 
}
foreach($imageTags作为$tag){
$content=preg\u replace(“/]+\>/i”,”,$content);
}

我认为这里的DOMDocument不是从字符串加载HTML。一些奇怪的问题。我更喜欢使用DOM解析器,例如

您可以像这样使用它:

  $content= 'Click for more info <img src="http://www.domain.com/1.jpg" />';

  require_once('simple_html_dom.php');

  $post_dom = str_get_html($content);

  $img_tags = $post_dom->find('img');

  $images = array();

  foreach($img_tags as $image) {
      $source = $image->attr['src'];
      $content = preg_replace("/<img[^>]+\>/i", "<a href=\"$source\"><img src=\"$source\" /></a>", $content); 
 }

 echo $content;
$content='点击查看更多信息';
require_once('simple_html_dom.php');
$post\u dom=str\u get\u html($content);
$img_tags=$post_dom->find('img');
$images=array();
foreach($img_标记为$image){
$source=$image->attr['src'];
$content=preg\u replace(“/]+\>/i”,”,$content);
}
echo$内容;

希望这有帮助:)

在脚本中,$content是一个对象,preg\u replace只支持字符串和数组。更好的方法
foreach($imageTags as $tag) {
    $content = preg_replace("/<img[^>]+\>/i", "<a href=\"$tag->nodeValue\"><img src=\"$tag->nodeValue\" /></a>", $content); 
}
  $content= 'Click for more info <img src="http://www.domain.com/1.jpg" />';

  require_once('simple_html_dom.php');

  $post_dom = str_get_html($content);

  $img_tags = $post_dom->find('img');

  $images = array();

  foreach($img_tags as $image) {
      $source = $image->attr['src'];
      $content = preg_replace("/<img[^>]+\>/i", "<a href=\"$source\"><img src=\"$source\" /></a>", $content); 
 }

 echo $content;