小编And*_*res的帖子

PHP DOMDocument:解析非转义字符串时出错

我在使用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的答案 …

html php domdocument

12
推荐指数
2
解决办法
1159
查看次数

文件夹作为PHP中的参数

我想创建一个脚本,将网站中请求的每个文件夹作为参数传递.

例如,如果有人请求:

www.example.com/foo
Run Code Online (Sandbox Code Playgroud)

...将被重定向到主index.php并作为参数传递,在请求时获得相同的结果 www.example.com/index.php?foo

请注意,请求的文件夹将是随机的,所以我无法预测文件夹并在那里放置一个PHP脚本.

我应该通过HTACCESS处理所有404请求吗?还是有更高档的解决方案?

php

3
推荐指数
1
解决办法
2764
查看次数

CakePHP-查找并计算存在多少关联记录

我正在尝试执行一个搜索,作为条件,它必须仅返回具有一定数量关联记录的记录

目前,我有一个模型(波段)和一个相关模型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,但我正在寻找“一个发现,没有处理”的解决方案。

mysql cakephp

1
推荐指数
1
解决办法
2863
查看次数

标签 统计

php ×2

cakephp ×1

domdocument ×1

html ×1

mysql ×1