PHP foreach循环在IE8中增加了结束

时间:2014-11-18 21:02:33

标签: php html internet-explorer

我有一个foreach循环:

<ul>
    <?php

        foreach ($pages['results'] as $row => $value) {
            echo '<li>' . $row . '<ul>';
            foreach ($value as $x => $y) {
                echo '<li><a href="#' . str_replace(" ", "", strtolower($y[2])) . '" title="' . $x . '">' . $x  . '</a></li>';
            }
            echo '</li></ul>';
        }
    ?>
</ul>

而且,这在Chrome,Firefox,Safari,IE 9中运行良好,但在IE 8中则不行。

CSS是正确的,但</ul>的第一行之后,foreach之外的最后foreach关闭。我希望这是有道理的,为什么IE 8会这样做?

这是吐出的HTML:

            

新居社区

            
                    
  • Ancaster
    • Ancaster Glen
  • Beamsville
    • 发现
  • Binbrook
    • Fairgrounds Finale
    • Parkside Village
  • Collingwood
    • Summit Shores
  • Hamilton
    • Greenhill Glen
    • 派对公园
    • Sherman Oaks
  • 基奇纳
    • Doon Creek
    • Victoria Common
  • Stoney Creek
    • Orchard Park
                

3 个答案:

答案 0 :(得分:6)

替换最终的回声,你需要关闭ul然后关闭li

echo '</ul></li>';

答案 1 :(得分:0)

虽然修复错误的解决方案很明显,但它没有回答这个问题。我们需要知道什么浏览器必须解析无效的HTML代码。它不会向我们显示错误,但它将使用一些算法来克服错误并在dom树中插入正确的元素。这个名称是browsers error tolerance,它在浏览器之间略有不同。更重要的是,它可能会随着浏览器升级而改变,所以你有答案:IE8浏览器的容错可能没有错,但与其他浏览器相比,如果 li找到了带有开始标签的end-tag省略

开发人员应阅读this article

答案 2 :(得分:-1)

尝试像这样交换结束ul和li:

<ul>
                <?php

                        foreach ($pages['results'] as $row => $value) {
                                echo '<li>' . $row . '<ul>';
                                foreach ($value as $x => $y) {
                                        echo '<li><a href="#' . str_replace(" ", "", strtolower($y[2])) . '" title="' . $x . '">' . $x  . '</a></li>';
                                }
                                echo '</ul></li>'; //just swap closing elements
                        }

                ?>

            </ul>