Javascript/PHP中的HTML转义/编码


HTML Escaping/Encoding in Javascript/PHP

我在数据库中保存了多页html代码。我希望一个文件能够在不重新加载的情况下翻阅这些页面。

我创建了一个PHP文件,将所有页面拉入数据库。

该页面显示第一个页面和导航按钮。

还有一个javascript可以将所有其他页面放入一个数组中,这样我就可以快速切换页面。

var pages = new Array();
<?php foreach ($coursePages as $page): ?>
    pages[pageCount] = "<?php echo ($page['body']) ?>";
    pageCount++;
<?php endforeach ?>

我的问题是创建javascript数组。如何正确地从回声中转义数据,以便它最终可以使用以下内容更改页面内容:

$(document).ready(function() {
    $('.navNext, .navPrevious').click(function({
        if ($(this).hasClass('navNext')) {
            page++;
            if (page > pageCount) {
                page = 0;
            }
        } else {
            page--;
            if (page < 0) {
                page = 0;
            }
        }
        $('.page').html(pages[page]);
    }))
});

任何时候从PHP向JavaScript动态发送值,都可以简单地使用json_encode()。它将始终生成有效的JavaScript并处理所有数据类型。示例:

<script>
    var a = <?php echo json_encode($var)?>;
</script>

您可以使用此函数来转义js值:

function js_escape_string($str)
{
    $str = str_replace("''", "''''", strval($str));
    $str = str_replace("'", "'''", $str);
    $str = str_replace("'r", "''r", $str);
    $str = str_replace("'n", "''n", $str);
    $str = str_replace("'t", "''t", $str);
    $str = str_replace("</script>", "</'+'script>", $str);
    return $str;
}

注意:在JS值周围使用单引号,如:

<script>
var a = '<?php echo js_escape_string(....); ?>';
</script>