如何保留格式并保护代码免受脚本影响

时间:2021-04-05 10:12:31

标签: php html

我试图找到一种方法来转义插入到我的数据库中的脚本或标签,同时保留文本格式。然而,我遇到了几个只能解决两者中的一个的问题。 我正在尝试在 $blog['title']$blog['content']

我尝试使用 nl2br() 来保留格式。它可以保留格式,但仍然不会转义 HTML 标记和脚本。

这些是我的代码。 请注意,我正在使用类,其中我的所有函数都在那里,并在我当前的博客页面中实例化了该类。

博客帖子 HTML 块

<?php
                            if(isset($_GET['id'])){
                                $selectedBlog = $cakeOrdering->get_data("SELECT blogID, title, content, img, author, dateCreated FROM blogs WHERE blogID = ?", array($_GET['id']));
                                if(is_array($selectedBlog) || is_object($selectedBlog)){
                                    foreach($selectedBlog as $blog){
                        ?>
                        <!-- Blog Posts -->
                        <div class="blog_item">
                            <div class="blog_img">
                                <img class="img-fluid" src="../img/blogs/<?php echo $blog['img']; ?>" alt="">
                            </div>
                            <div class="blog_text">
                                <div class="blog_time">
                                    <div class="float-left">
                                        <a href="#"><?php echo $blog['dateCreated']; ?></a>
                                    </div>
                                    <div class="float-right">
                                        <ul class="list_style">
                                            <li><a href="#">By :  <?php echo $blog['author']; ?></a></li>
                                            <li><a href="#">category</a></li>
                                            <li><a href="#">Comments: 8</a></li>
                                        </ul>
                                    </div>
                                </div>
                                <a href="#"><h4><?php echo $cakeOrdering->escape($blog['title']); ?></h4></a>
                                <p style="word-wrap: break-word;"><?php echo $cakeOrdering->escape(nl2br($blog['content'])); ?></p>
                            </div>
                        </div>
                        <?php }}} ?>

我在php类中创建了一个名为escape的函数

// Escaping characters
public function escape($string){
    echo htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}

如果我使用这个:

$cakeOrdering->escape(nl2br($blog['content']));

它输出: output1

但是如果我像这样删除转义函数

nl2br($blog['content']);

它输出:(保留格式但也执行脚本) alert enter image description here

1 个答案:

答案 0 :(得分:1)

反过来说:

(defmacro keyed [names]
  (into {}
        (for [n names]
          [(keyword n) n])))