Skip to content

Fatal error loading HTML data #2120

Open
@emrenogay

Description

@emrenogay

Fatal error loading HTML data

Fatal error: Uncaught BadMethodCallException: Cannot add TextRun in TextRun. in /Applications/MAMP/htdocs/bot/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php:266 Stack trace: #0 /Applications/MAMP/htdocs/bot/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php(131): PhpOffice\PhpWord\Element\AbstractContainer->checkValidity('TextRun') #1 [internal function]: PhpOffice\PhpWord\Element\AbstractContainer->addElement('TextRun', Array) #2 /Applications/MAMP/htdocs/bot/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php(113): call_user_func_array(Array, Array) #3 /Applications/MAMP/htdocs/bot/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php(265): PhpOffice\PhpWord\Element\AbstractContainer->__call('addtextrun', Array) #4 [internal function]: PhpOffice\PhpWord\Shared\Html::parseParagraph(Object(DOMElement), Object(PhpOffice\PhpWord\Element\TextRun), Array) #5 /Applications/MAMP/htdocs/bot/vendor/phpoffice/phpword/src/PhpWord/Shared/Html.php(215): call_user_func_array(Array, Arr in /Applications/MAMP/htdocs/bot/vendor/phpoffice/phpword/src/PhpWord/Element/AbstractContainer.php on line 266

<?php

error_reporting(E_ERROR);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);

header('Content-Type: text/html; charset=utf-8');
include '../functions.php';
require('../vendor/autoload.php');

use PHPHtmlParser\Dom;
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$phpWord->addParagraphStyle('Heading2', array('alignment' => 'center'));

\PhpOffice\PhpWord\Settings::setOutputEscapingEnabled(true);



$sitemap = $_POST['sitemap'];
$classes = $_POST['classes'];
$sitename = str_replace('.', '-', explode('/', $sitemap)[2]);

$sitemap_data = url_get_contents($sitemap);

$dom = new DOMDocument();
$dom->recover = true;
$dom->formatOutput = true;
$dom->preserveWhiteSpace = true;
$dom->strictErrorChecking = false;
$dom->loadHTML($sitemap_data);
$xpath = new DomXpath($dom);

$i = 0;
$data = '';
$expression = '//*[@class="' . $classes . '"]';
$parsed = '';

$section = $phpWord->addSection();
$html = '';
$h1 = '';
date_default_timezone_set("Europe/Istanbul");

$savename = $sitename . '-' . date('d-m-Y H-i-s') . '.docx';

$chars = ['&#8217;', '&ccedil;', '&#8220;', '&#8221;', "\t"];
$replaced = ["", 'ç', '', '', ''];

while ($i < 10) {
    $url = $xpath->query('//url/loc')->item($i)->nodeValue;

    if(!empty($url)){

        $dom = new Dom;
        $dom->loadFromUrl($url);
        $contents = $dom->find('*[class="'.$classes.'"]');

        foreach ($contents as $content) {

            $html .= trim(str_replace($chars, $replaced, preg_replace("/\s+/", " ", strip_tags($content->innerHtml, '<p><b><strong><ul><ol><li><h1><h2><h3><h4><h5><h6>'))));
        }

    }

    $i++;
}

echo $html;
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $html);
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');

$objWriter->save($savename);

Expected Behavior

A clear and concise description of what you expected to happen.

Current Behavior

What is the current behavior?

Context

Please fill in your environment information:

  • PHP Version: 7.4
  • PHPWord Version: 0.18.2

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions