/** * * Returns positions of <script>...</script> elements * @param $content * @return array */ private function getScriptAreas($content) { $openTag = "<script"; $closingTag = "</script"; $ending = ">"; $offset = 0; $areas = array(); $content = String::getBinaryStrtolower($content); while (($openTagStart = String::getBinaryStrpos($content, $openTag, $offset)) !== false) { $endingPos = String::getBinaryStrpos($content, $ending, $openTagStart); if ($endingPos === false) { break; } $attrsStart = $openTagStart + strlen($openTag); $attrs = String::getBinarySubstring($content, $attrsStart, $endingPos - $attrsStart); $openTagEnd = $endingPos + strlen($ending); $realClosingTag = $closingTag . $ending; $closingTagStart = String::getBinaryStrpos($content, $realClosingTag, $openTagEnd); if ($closingTagStart === false) { $offset = $openTagEnd; continue; } $closingTagEnd = $closingTagStart + strlen($realClosingTag); while (isset($content[$closingTagEnd]) && $content[$closingTagEnd] === "\n") { $closingTagEnd++; } $area = new \stdClass(); $area->attrs = $attrs; $area->openTagStart = $openTagStart; $area->openTagEnd = $openTagEnd; $area->closingTagStart = $closingTagStart; $area->closingTagEnd = $closingTagEnd; $areas[] = $area; $offset = $closingTagEnd; } return $areas; }