удалить свойства встроенного стиля и добавить атрибуты HTML, используя php - PullRequest
0 голосов
/ 17 мая 2011

1) конвертировать

<table style="width: 700px; height: 300px; background-color: #ff0000;" border="0">

до

<table width="700" height="300" bgcolor="#ff0000" border="0">

2) конвертировать

<table style="width: 700px; background-color: #ff0000;" border="0">

до

<table width="700" bgcolor="#ff0000" border="0">

Я использую Joomla 1.5.x, где в контент-клиенте можно добавлять таблицы или вложенные таблицы. Tinymce, используя встроенные стили для размеров таблицы, свойства фона. Но когда мы пытаемся сгенерировать pdf из внешнего интерфейса, встроенные стили для таблицы игнорируются. Joomla использует TCPDF для генерации. Я обновил версию, но та же проблема. Когда я преобразовал свойства css в атрибуты html, он генерирует таблицу в форматированном виде. Поэтому мы решили заменить все встроенные стили для атрибутов table, td, th на html. Пробовал со многими ветками с этого сайта, но не смог их использовать, так как я плохо разбираюсь в регулярных выражениях.

Пожалуйста, помогите мне в этом.

Заранее спасибо.

1 Ответ

6 голосов
/ 17 мая 2011

Я думаю, вы можете использовать PHP DOM для этого.

1) Используйте DOMElement :: getAttribute (), чтобы получить значение атрибута style=

2) Используйте $split = explode(";", $style) для разделения этих значений CSS

3) С каждой записью $ i of $ split, $attributes = explode(":", $split[$i]), в имени атрибута get и его значении.

4) Теперь у вас есть $ атрибуты, содержащие 2 значения: атрибут и значение этого атрибута.

5) Используйте DOMElement :: setAttribute (), чтобы добавить эти значения атрибутов $.

Итак, поместите все в коды:

$dom = new DOMDocument();

$dom->loadHTML($html);

$atrvalue= $dom->getAttribute("style");

$split = explode(";", $atrvalue);

for ($i=0; $i<=count($split); $i++) {
    $attribute = explode(":", $split[$i]);
    $node = $doc->createElement("table");
    $newnode = $doc->appendChild($node);
    $newnode->setAttribute($attribute[0], $attribute[1]);
}

Этот способ не требует регулярных выражений :) Но вам нужно изменить его, чтобы он соответствовал вашему контексту.

...