regex — PHP Preg Replace в SVG-файле вызывает ошибку сегментации

Когда я пытаюсь выполнить эту команду в моем SVG-файле, браузер сообщает, что данные не получены, и я получаю сообщение об ошибке в моем файле журнала Apache.

preg_match("/(<g(\s|\S)*?<\/g>)/i", $SVG, $Matches);

Мой SVG-файл Вот.

И фактическая ошибка, которую я получаю это

[ядро: уведомление] [pid 20852] AH00052: сигнал выхода дочернего pid 31338
Ошибка сегментации (11)

Что я здесь не так сделал и как это исправить?

1

Решение

Использовать PHP DOM функции разобрать файлы XML. Есть веская причина, почему вы не должны использовать RegEX для разбора XML 🙂

Так как вы ищете все <g ...></g> теги, вы можете сделать это так:

$xdoc = new DOMDocument;
// load your .svg
$xdoc->Load('0057b8.svg');
// get all "g"-tags
$gTags = $xdoc->getElementsByTagName('g');
// since the return is a DOMNodeList, we loop through all (even if it's only 1)
foreach($gTags as $gTag) {
// and here we can e.g. get the attributes
echo $gTag->getAttribute('transform') . PHP_EOL;
echo $gTag->getAttribute('fill') . PHP_EOL;
echo $gTag->getAttribute('stroke') . PHP_EOL;
// or set a new attribute
$gTag->setAttribute('stroke-width', '5');
}

G-теги будут DOMElements, так что вы можете прочитать в ссылке, чтобы получить все возможные методы на них.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]