我在使用PHP的DOMDocument解析HTML时遇到了问题.
我正在解析的HMTL具有以下脚本标记:
<script type="text/javascript">
var showShareBarUI_params_e81 =
{
buttonWithCountTemplate: '<div class="sBtnWrap"><a href="#" onclick="$onClick"><div class="sBtn">$text<img src="$iconImg" /></div><div class="sCountBox">$count</div></a></div>',
}
</script>
Run Code Online (Sandbox Code Playgroud)
这个片段有两个问题:
1)buttonWithCountTemplatevar中的HTML 不会被转义.DOMDocument正确地管理它,在解析时转义字符.不是问题.
2)接近结尾,有一个img标签带有未转义的结束标签:
<img src="$iconImg" />
Run Code Online (Sandbox Code Playgroud)
该/>品牌的DOMDocument认为脚本执行完毕,但它缺少结束标记.如果使用getElementByTagName提取脚本,则会在此img标记处关闭标记,其余的将在HTML上显示为文本.
我的目标是删除此页面中的所有脚本,因此如果我执行removeChild()此标记,则会删除标记,但在呈现页面时,以下部分将显示为文本:
</div><div class="sCountBox">$count</div></a></div>',
}
</script>
Run Code Online (Sandbox Code Playgroud)
修复HTML不是一个解决方案,因为我正在开发一个通用的解析器,需要处理所有类型的HTML.
我的问题是,在将HTML提供给DOMDocument之前是否应该进行任何清理,或者是否有选项可以在DOMDocument上启用以避免触发此问题,或者即使我可以在加载HTML之前删除所有标记.
有任何想法吗?
经过一些研究,我发现了DOMDocument解析器的真正问题.请考虑以下HTML:
<div> <!-- Offending div without closing tag -->
<script type="text/javascript">
var test = '</div>';
// I should not appear on the result
</script>
Run Code Online (Sandbox Code Playgroud)
使用以下php代码删除脚本标记(基于Gholizadeh的答案 …
我想创建一个脚本,将网站中请求的每个文件夹作为参数传递.
例如,如果有人请求:
www.example.com/foo
Run Code Online (Sandbox Code Playgroud)
...将被重定向到主index.php并作为参数传递,在请求时获得相同的结果 www.example.com/index.php?foo
请注意,请求的文件夹将是随机的,所以我无法预测文件夹并在那里放置一个PHP脚本.
我应该通过HTACCESS处理所有404请求吗?还是有更高档的解决方案?
我正在尝试执行一个搜索,作为条件,它必须仅返回具有一定数量关联记录的记录。
目前,我有一个模型(波段)和一个相关模型thourgh hasmany(Songids)。每个乐队可以有许多歌声。
在这个特定的搜索中,我想返回4个频段的结果,其中这些频段至少具有 10个相关的Songid。
我试图在查找过程中使用“ HAVING”条件执行此操作,并使用“ COUNT(Songid.band_id)”在Songid模型中的virtualfields中执行此操作,但它仅返回总计,而不仅仅是返回所选字段。
我怎样才能做到这一点?我在想类似的东西:
$random = $this->Band->find('all', array(
'fields' => array('Band.band'),
'order' => 'rand()',
'limit' => 4,
'contain' => array(
'Songid' => array(
'conditions' => array(
'band_id COUNT' => 2)
)
)
)
);
Run Code Online (Sandbox Code Playgroud)
最后一部分“'band_id COUNT'=> 2”应该可以解决问题,但我无法使其正常工作。有任何想法吗?
编辑:我可以找到所有,然后为每个关联的模型计数的foreach,但我正在寻找“一个发现,没有处理”的解决方案。