PHP DOMDocument操作在本地运行时返回预期值,但在页面在服务器

时间:2017-05-01 20:05:11

标签: php wordpress xpath domdocument shortcode

我正在制作Wordpress主题并且我有一个自定义短代码。短代码包含在一些内容中,其中包含图像。短代码使用DOMDocument来提取图像的src,并使用该URL使其成为新DIV上的背景图像。

以下是相关代码:

 //find image src
$html = do_shortcode($content);

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"

echo '<script>console.log('.'"Source: '.$src.'");</script>';

$overlay_html = '';
foreach($xpath->evaluate("//*[contains(@class, 'sp-img-overlay')]") as $childNode) {
  $overlay_html .= $doc->saveHtml($childNode);
} 

//removes empty p tags from content
$content = do_shortcode($content);
$content = force_balance_tags($content);
$content = preg_replace('#<p>\s*+(<br\s*/*>)?\s*</p>#i', '', $content);

//removes the actual images and captions
$just_text = $content;
$just_text = preg_replace('#(<figure.*?>).*?(</figure>)#', '', $just_text);
$just_text = preg_replace("/<img[^>]+\>/i", "", $just_text);


//build output
//make src captured earlier the background image.
$output = '<div class="section-pairing full-bleed-mobile">'; 
    $output .= '<div class="section-pairing-img full-bleed-mobile '.$img_side.' '.$values['mobile_img_size'] .'" style=" background-image:url('. $src .')">';
        $output .= $overlay_html;
    $output .= '</div>';

    $output .= '<div class="section-pairing-text '.$text_side.'">';
        $output .= $just_text;
    $output .= "</div>";
$output .= "</div>";


return $output;

当我在本地开发环境中运行此控制台日志时。 。

echo '<script>console.log('.'"Source: '.$src.'");</script>';

。 。 。返回图像的正确路径,短代码按预期工作。 但是当我迁移到服务器时,页面上的其他所有内容都能正常工作,但是这个短代码不起作用,并且控制台日志会返回&#34;来源:&#34;没有网址,也没有图像。

我是Web开发的新手,对于使用DOMDocument来说真的很陌生,因此任何有关如何完成这项工作的建议都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

嘿大家我找到了解决方案。

 //find image src
$html = do_shortcode($content);

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);
$allImages = $doc->getElementsByTagName('img');
$imgL = $allImages->length;
$bgimg = $allImages->item(0);
$src = $bgimg->getAttribute('src');

密钥似乎是从loadHTML命令中删除“LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD”。我让那些人解决了我之前遇到的一些问题,但现在一切都运转正常。

我还发现了我认为获得src属性的更好方法。