【问题标题】:How do I add nl2br and htmlentities in this code如何在此代码中添加 nl2br 和 htmlentities
【发布时间】:2016-07-12 15:46:15
【问题描述】:

我需要一些帮助。如何将 nl2br() 和 htmlentities() 函数输出到我的代码中?两者都需要应用于“内容”,但 htmlentities 需要应用于“标题”。

<?php
$sql = "
    SELECT    
        post.id AS postid, post.title AS title, post.created, 
        DATE_FORMAT(Created, '%d-%m-%Y') AS created,
        post.content AS content, post.image AS image,
        post.alttext AS alttext, blog.id, blog.blogname
    FROM
        post
    LEFT JOIN  
        blog ON post.blogid = blog.id
    WHERE      
        blogid = \"" .(int)$_GET['id'] . "\"
    ORDER BY   
        postid DESC";

$results = $db->query($sql);

if ($results->num_rows) {
    while ($row = $results->fetch_object()) {
        echo "<hr>
                <h3>{$row->title}</h3>
                <p>{$row->created}</p>
                <p>
                    <div id='blog-image'>
                        <img src='images/{$row->image}' alt='{$row->alttext}'>
                    </div>
                    {$row->content}
                </p>";
    }
} else {
    echo 'No Results';
}
?>

【问题讨论】:

  • 所以你知道(int)(int)$_GET['id']的应用,但是不知道nl2br()htmlentities()的应用?提示,您将使用与引号类似的方法。

标签: php mysql database


【解决方案1】:

您可以为此使用新变量:

if ($results->num_rows) {
    while ($row = $results->fetch_object()) {
        $title = htmlentities($row->title);
        $content = nl2br(htmlentities($row->content));
        echo "<hr>
            <h3>{$title}</h3>
            <p>{$row->created}</p>
            <p>
                <div id='blog-image'>
                    <img src='images/{$row->image}' alt='{$row->alttext}'>
                </div>
                {$content}
            </p>
        ";
    }
}

或者断字符串:

if ($results->num_rows) {
    while ($row = $results->fetch_object()) {
        echo "<hr>
            <h3>". htmlentities($row->title) ."</h3>
            <p>{$row->created}</p>
            <p>
                <div id='blog-image'>
                    <img src='images/{$row->image}' alt='{$row->alttext}'>
                </div>
                ". nl2br(htmlentities($row->content)) ."
            </p>
        ";
    }
}

【讨论】:

    【解决方案2】:

    最简洁的方法是抽象获取过程,这样数据需要解构的事实就可以从绘制结果的视图过程中抽象出来。
    添加一个函数:-

    function demangle_row($row) {
      $row->content = nl2br($row->content);
      $row->content = htmlentities($row->content);
      $row->title   = htmlentities($row->title);
    }
    

    现在更改while语句,使用上面的代码

    While($row = $results->fetch_object()) {
    

    变成

    While($row = demangle_row($results->fetch_object())) {
    

    【讨论】:

    • 你可以这样做 function demangle_row(&amp;$row) 所以也可以 demangle_row($results-&gt;fetch_object());While($row = $results-&gt;fetch_object()) { - 使代码更具可读性
    • 你说的行不通。如果您要更改函数以通过引用使用参数,您仍然需要分配它,并将其传入。因此 demangle_row($results->fetch_object()) 将失败并返回“无法传递函数返回值”通过引用'或其他东西。
    • 但是,如果您确实将其更改为通过引用传递,则可以使用 demangle_row($row);作为 while 循环的第一行。有 3 种方法可以做到这一点。 1:作为 while 语句中的链式函数(如我建议的那样),2:作为 while 循环中的链式函数($row = demangle_row($row);),或 3:作为 while 循环中的引用函数。我发现传递引用函数更难阅读。一般来说,我本能地理解链作为过滤器(javascript 做了很多),而飞行函数显然没有处理传递给它的变量。选项 2 是否更好值得商榷。
    猜你喜欢
    • 2017-02-13
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多