В настоящее время я борюсь со странным поведением PHP (по крайней мере, мне кажется странным).
У меня есть этот код (он соответствует всем src
а также href
атрибуты внутри буферизованной HTML-страницы, которая может быть еще не оптимальной, но работает без нареканий):
$regex = '#(</?\w+\s+(?:\w+(?:\s*=\s*(?:"[^"]*"|\'[^\']*\'|[^"\'>\s]+))?\s*)*(?:href|src)\s*=\s*)("[^"]*"|\'[^\']*\'|[^"\'>\s]+)#Uis';
$buffer = preg_replace_callback($regex, function($match) {
$match[2] = preg_replace('/^["\'](.*)["\']$/', '\1', $match[2]);
// do further stuff
return $match[0];
}, $buffer);
Теперь это заняло у меня очень долго выяснять почему preg_replace_callback
вернет NULL только немного ситуации, и оказалось, что она разрывается, когда строка больше 2 ^ 16, что мне кажется странным, потому что у меня никогда не было проблем с ограничениями в PHP раньше, и я даже буферизовал файлы размером в несколько сотен МБ.
То, что я попробовал сейчас, это:
$test = str_repeat('1', 65537); // 2**16+1
echo $test; // NULL (prints an empty string)
Я спросил Google, но я действительно нашел ничего такого. Кажется, что ни у кого нет этой проблемы, и каждый источник говорит, что вы даже можете хранить ГБ в строке.
Я использую OS X и встроенную среду AMPP.
Задача ещё не решена.
Других решений пока нет …