preg_replace_callback сохранить совпадение в глобальном массиве и заменить

Я пытаюсь сжать HTML-код, но не трогаю стиль, сценарий, предварительный и условный IE.

Моя проблема в том, что я не могу хранить совпадения функций внутри массива. Я могу успешно заменить результаты регулярных выражений, но результирующий массив пуст $idarray:

function html_compress($string){

//Substitute style, script and pre tag with unique id

$idarray=array();

$search=array('@<!--\[if\s(?:[^<]+|<(?!!\[endif\]-->))*<!\[endif\]-->@','@<script[^>]*>(?:[^<]+|)</script>@','@<style[^>]*>(?:[^<]+|)</style>@','@<pre[^>]*>(?:[^<]+|)</pre>@','@//<!\[CDATA\[(?:[^<]+|)//]]>@');
$string=preg_replace_callback($search,
function($m){
$id=uniqid();
global $idarray;
$idarray[]=array($id,$m);
return '<!['.$id.']!>';
},
$string
);

$search = array('/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s');
$replace = array('>','<','\\1');
$string = preg_replace($search, $replace, $string);

//Remove blank lines
$string=preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $string);

//Replace unique id with script, style, pre original tag
$c=count($idarray);
for($i=0;$i<$c;$i++){
$string = str_replace($idarray[$i][0], $idarray[$i][1], $string);
}

Mage::log(print_r($idarray, true), null, 'idarray.log');

return $string;
}

0

Решение

Хорошо, в начале:

global $idarray;
$idarray=array();
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector