我试图在PHP中拆分一些东西,我无法让它工作..现在已经尝试了一段时间,所以我想在这里问。
所以我可以说我的源代码中有多个<script> ... </script>
,那么我可以做些什么来将它们分成一个字符串。我正在尝试爆炸,但没有按计划进行。
这是我到目前为止所尝试的:
$script = explode('<script>',$data,1);
echo htmlspecialchars($script[1]);
尝试过,但没有得到任何具体的<script>
。
示例脚本:
<script>
script here...
</script>
<script>
second script here...
</script>
那么我将如何获得第二个脚本呢?
抱歉,我不是最好的正则表达式或用PHP解析,并祝大家圣诞快乐! :)
答案 0 :(得分:3)
使用loadHTML()
:
$doc = new DOMDocument();
// load the HTML string we want to strip
$doc->loadHTML($html);
// get all the script tags
$script_tags = $doc->getElementsByTagName('script');
答案 1 :(得分:3)
不要使用字符串函数解析HTML。或者正则表达式,就此而言。 <center>
无法保留正则表达式和HTML。但这是一个不同的故事。相反,使用html解析器,如Simple HTML DOM(由于某种原因,我的高中愚蠢的防火墙阻止了它)。如果我错了,请纠正我,因为我无法访问它的文档。
include("simple_html_dom.php");
$html=str_get_html($text);
$scripts=$html->find("script");
foreach($scripts as $script){
echo(htmlspecialchars($script));
}
答案 2 :(得分:2)
我使用DOM解析器(如PHP的DOMDocument)来提取所需的数据,而不是字符串函数。这是你如何做到的:
$text = <<<TEXT
<script>
script here...
</script>
<script>
second script here...
</script>
TEXT;
$dom = new DOMDocument;
$dom->loadHTML($text);
echo $dom->getElementsByTagName('script')->item(1)->nodeValue;
一些解释:
使用loadHTML()
方法加载文本,然后使用getElementsByTagName()
方法获取所有脚本标记。现在,我们使用item(1)
专门定位第二个<script>
标记,然后回显该节点的nodeValue
。
输出:
second script here...