【问题标题】:Special characters showing up on content retrieved from mysql using php使用 php 从 mysql 检索的内容上显示的特殊字符
【发布时间】:2015-12-19 10:18:02
【问题描述】:

我将内容存储在 mysql 数据库中。当我尝试使用 PHP 检索内容并使用 html 和 CSS 显示时,其中一些会显示这些特殊字符 ������。

我已经在我的 HTML 中声明了编码类型,用于呈现 PHP 内容,如下所示。

我也将这个添加到了 html 文档的头部

<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta charset="utf-8">

    <!-- [portable options] -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0;" />
    <meta name="apple-mobile-web-app-capable" content="yes" />

我犯了什么错误,检索到的内容显示特殊字符?

这是包含从 mysql 检索数据的 PHP 脚本的文档

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta charset="utf-8">


    <!-- [loading stylesheets] -->    
    <link type="text/css" rel="stylesheet" href="css/style.css" />      

    <!-- [loading stylesheets] -->    
    <link type="text/css" rel="stylesheet" href="css/style.css" />
    <link type="text/css" rel="stylesheet" href="css/flexslider.css" />      

    <!-- [loading scripts] -->   

    <script type="text/javascript" src="js/jquery-2.0.3.min.js"></script>
    <script type="text/javascript" src="js/main.js"></script>

    </head>
    <body>
    <div class="blog-post">
                  <div class="wrapper">
                  <!--
                  <iframe frameborder="0" scrolling="yes" width="100%" height="500px" 
   src="debug/includes/news_index.php" name="" id="">
 </iframe>
 -->
         <?php
    // connection string constants
    define('DSN', 'mysql:dbname=mydb;host=localhost');
    define('USER', 'myadmin');
    define('PASSWORD', 'mypwd2015');

    // pdo instance creation
    $pdo = new PDO(DSN, USER, PASSWORD);

    // query preparation
    $stmt = $pdo->query("
        SELECT title, introtext, id, created, created_by, catid
        FROM mytbl_items 
    ");

    // fetching results
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // if this returns 0 then it means no records are present
    echo count($result) . "\n";

    // the loop should print valid table
    foreach ($result as $index => $row) {
        if ($index == 0) echo '<div>';
        echo <<<HTM

        <span class="post-date">{$row['created']}</span>

        <h2 class="blog-post-title">{$row['title']}</h2>

        <p>
            {$row['introtext']}
        </p>
        <p>
            <a href='read_serverside.php?id={$row['id']}'><input type="button" value="Read More" /></a>
        </p>
        <div class="blog-meta">
            <img src="img/avatar.png" alt="Avatar" />
            <h4 class="blog-meta-author">{$row['created_by']}</h4>
            <span>Category: {$row['catid']}</span>
        </div>
HTM;
        if ($index == (count($result)-1)) echo '</div>';
    }
    ?>
                   </div> <!-- .blog-meta --> 
                </div> <!-- .blog-post #2 --> 

    </body>
</html>

我还应该做些什么来避免特殊字符出现?

【问题讨论】:

  • 如果可以,请停止使用 mysql_ 并改用 使用 mysqli_PDO由于它已被弃用,请查看this
  • 您从数据库中检索什么文本。也许你可以看看htmlentities()

标签: php html mysql special-characters


【解决方案1】:

尝试在 PDO 连接中设置 utf8 字符集,如下所示:

$pdo = new PDO(DSN, USER, PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND =&gt; "SET NAMES utf8"));

【讨论】:

    【解决方案2】:

    这对我有用。 在 HTML 开始之前试试这个。 我希望它也对你有用。

    <?php header('Content-Type: text/html; charset=iso-8859-15'); ?>
    <!DOCTYPE html>
    
    <html lang="en-US">
    <head>

    【讨论】:

      【解决方案3】:

      您的数据库中有一些字符在 Unicode UTF 8 中不存在。此格式无法识别数据,因此它们显示为奇怪的字符。我建议您将&lt;meta charset="utf-8"&gt; 更改为@charset 'iso-8859-15' 或删除该行。如果这不起作用,您必须转到导致错误的数据并确定使用的编码类型。

      【讨论】:

        【解决方案4】:

        如果你有主控制器或前端控制器,你应该放

        header('Content-Type: text/html; charset=utf-8');
        

        在某处。 如果您在开始输出 html 之前没有将该调用放在文件的最开头:

        <?php header('Content-Type: text/html; charset=utf-8'); ?>
        <!DOCTYPE html> 
        <html> 
        <head> 
        ......
        

        【讨论】:

          猜你喜欢
          • 2017-01-07
          • 2012-10-04
          • 1970-01-01
          • 2013-10-05
          • 2021-11-10
          • 1970-01-01
          • 1970-01-01
          • 2019-04-07
          • 1970-01-01
          相关资源
          最近更新 更多