1

タイトルは基本的にそれを要約しています。小さなブログを作成しましたが、記事にリンクを投稿することすらできません。私に何ができる?私は、、、そして基本的にあらゆる形の脱出を試みhtmlentities()ましhtmlspecialchars()real_escape_string()。MySQL5.1でPHP5.3を使用しています

ブログをデータベースに保存するための私のコードは次のとおりです。

function check_input($data, $problem='')
{
$data = trim($data);
$data = stripslashes($data);
$data = htmlentities($data);
if ($problem && strlen($data) == 0)
{
    die($problem);
}
    return $data;
}

if(isset($_POST['addBlog'])) { //form submitted?

// get form values, escape them and apply the check_input function
$title = $link->real_escape_string($_POST['title']);
$category = $link->real_escape_string(check_input($_POST['category'], "You must choose a category."));
$content = $link->real_escape_string(check_input($_POST['blogContent'], "You can't publish a blog with no blog... dumbass."));
$date = $link->real_escape_string(check_input($_POST['pub_date'], "What day is it foo?"));

 // our sql query
$sql = $link->prepare("INSERT INTO pub_blogs (title, date, category, content) VALUES (?, ?, ?, ?)");
$sql->bind_param('ssss', $title, $date, $category, $content);


//save the blog     
#mysqli_query($link, $sql) or die("Error in Query: " . mysqli_error($link));
$sql->execute();

if (!$sql) 
{
    print "<p> Your Blog Was NOT Saved. </p>";
}
}   

ブログを表示するための私のコードは次のとおりです。

// Grab the data from our people table
        $result = mysqli_query($link, "SELECT * FROM pub_blogs ORDER BY date DESC") or die ("Could not access DB: " . mysqli_error($link));

        while ($row = mysqli_fetch_assoc($result))
        {   
            $id = $link->real_escape_string($row['id']);
            $title = $link->real_escape_string($row['title']);
            $date = $link->real_escape_string($row['date']);
            $category = $link->real_escape_string($row['category']);
            $content = $link->real_escape_string($row['content']);

            $id = stripslashes($id);
            $title = stripslashes($title);
            $date = stripslashes($date);
            $category = stripslashes($category);
            $content = stripslashes($content);

            echo "<div class='blog_entry_container'>";
            echo "<span class='entry_date'><a href='#'>" .$date. "</a> - </span><span class='blog_title'><a class='blogTitleLink' href='blog-view.php?id=" .$id. "'>" .$title. "</a></span>"; 
            echo "<p>" .$content. "</p>";
            echo "</div>";
        }
4

1 に答える 1

4

文字をエンコードすることは良いことですが、エンコードしすぎないようにする必要があります。

その時点で/必要/エンコードするものだけをエンコードします。HTML をデータベースに入れる前にエンコードしないでください。後で印刷したい場合や、検索を実行したい場合があります。SQL 用の適切なエスケープ シーケンスを使用します (または、より良い方法として を使用しますPDO)。

HTML をエスケープする必要があるのは、ブラウザに送信するときだけです。次に、必要なエスケープの種類を決定する必要があります。<&のようなものを文字エンティティとして変換して、適切に表示されるようにするには、適切なエスケープ メソッドを使用します。

于 2012-09-27T03:50:29.430 に答える