PHP不会str_replace数据库中的单引号

时间:2013-05-29 05:19:34

标签: php mysql ascii content-type

这真的很难解释,所以在这里......

我从phpmyadmin获取包含未转义单引号的数据。我正在尝试使用php标头中的''转换为Content-Type: text/html;

在数据库的一列中,这是值:This year's...

我将内容类型设置为<?php header('Content-Type: text/html; charset=UTF-8'); ?>

我使用mysql_fetch_assoc()获取数据,因此应输出This year&apos;s。但是,它会输出This year�s...

然后我从数据库中手动删除This year's...并将其替换为相同的This year's...(直接在数据库中)。我再次将内容类型设置为text/html并获得此内容:

This year&apos;s...

就是这样......这几乎无法解释。单引号通过表单提交给数据库。我获取它并将内容类型设置为text / html,并将'输出为。如果我进入数据库,请手动删除',然后将其替换为相同的',然后输出&apos;

有没有人经历过这种奇怪的怪癖或认识到它可能是什么?

更新:

数据库中的值为This year's,由表单上传。报价未在数据库中转义。这是我如何获取数据。我希望将'转换为&apos;

<?php
    header('Content-Type: text/html; charset=UTF-8');
    include('init.inc.php');

    function get_feeds() {
        $query = mysql_query("SELECT * FROM test ORDER BY id DESC LIMIT 1");
        while($fetch = mysql_fetch_assoc($query)) {

            $text = $fetch['text'];         

            echo $text;         

            }
        }

?>
<?php get_feeds(); ?>

输出This year�s

然后我从数据库中删除This year's并手动将This year's写入其中。它会输出This year&apos;s

1 个答案:

答案 0 :(得分:0)

插入数据库之前

将特殊字符转换为HTML实体

htmlspecialchars("This year's");