【问题标题】:foreign and special characters not displaying不显示外来字符和特殊字符
【发布时间】:2013-11-11 10:24:17
【问题描述】:

我有一个波兰语电子商务网站,产品类别存储在数据库中(波兰语)

由于某些原因,特殊的外来字符没有显示,而只显示在网站的某些部分。

像 ł、ą、ó 等字符。

问题是它们完美地显示在类别页面的主体中,但它们也显示在页面的左侧作为替代导航,而正是这个左侧导航,它们没有正确显示......他们显示为?或

我已经检查了数据库中的表,它存储为 utf8_general_ci

我已经检查了页面中包含的“left-nav.php”文件,它是用UTF8编码的。

我什至检查了类别页面文件,即使它在主体中正确显示字符,并且它也是以UTF8保存的。

我的网站标题中有这行代码

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

我使用 HeidiSQL 来管理我的数据库,并且它们已正确存储在数据库中

我错过了什么吗?我该怎么做才能解决这个问题?

为什么像这样的特殊字符会在某些地方正确显示,而在其他地方却不能?

这是左侧导航顶部类别的代码

<?php
    $sql = mysqli_query($con, "SELECT * FROM RAE_categories_pl WHERE categoryID = '".$category."'");
    $result = mysqli_fetch_array($sql);?>
    <div class="liSelect"><img src="images/arrowdown_off.gif" style="padding:0px; margin:0px -10px 0 0;float:right;"><a class="select" href="<?php echo "http://" . $_SERVER['HTTP_HOST']?>/products/<?php echo $result['categoryID'];?>"><?php echo $result['categoryName'];?></a></div>
    <?php
    $sql2 = mysqli_query($con, "SELECT RAE_sub_categories_pl.categoryName AS subCatName, RAE_sub_categories_pl.categoryID AS subCatID FROM RAE_sub_categories_pl INNER JOIN RAE_products_pl ON RAE_products_pl.subCategory = RAE_sub_categories_pl.categoryID AND RAE_products_pl.active = 1 WHERE RAE_sub_categories_pl.parentCatID = '$category' GROUP BY RAE_sub_categories_pl.categoryID");
    while ($result2 = mysqli_fetch_array($sql2))
    {?>
        <div class="liul">
                <div class="ulli">
                    <a href="<?php echo "http://" . $_SERVER['HTTP_HOST'] . "/equipment/" . $category . "/" . $result2['subCatID'];?>"><?php echo $result2['subCatName']?></a>
                </div>
        </div>

【问题讨论】:

  • 尝试在脚本顶部添加ini_set('default_charset', 'UTF-8');
  • 无法说,为什么字符坏了,等你给我们看php代码,负责数据库交互
  • 好的,我修改了我的问题
  • @Kevlar 检查连接 MySQL 的代码,并确保在连接后调用 $con-&gt;set_charset("utf8")
  • @user4035 谢谢你确实解决了我的问题 :) 接受了你的回答

标签: php encoding utf-8


【解决方案1】:

确保您在 php 脚本中连接到 MySQL 后使用 SET NAMES 'UTF8',生成错误字符:

$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
    die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}

/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $con->error);
}

正如manual 所说:

SET NAMES 表示客户端将使用什么字符集发送 SQL 对服务器的语句...它还指定了服务器应该使用的字符集 用于将结果发送回客户端。

【讨论】:

  • 谢谢这对我有帮助:) 我刚刚添加了 "$con->set_charset("utf8");"在我的连接代码下方,它已修复它:) 再次感谢
  • 拯救了我的一天;] 遇到这个问题的每个人都应该考虑在 .php 文件中添加header('Content-Type: text/html; charset=UTF-8');,其中特殊字符与上面答案中显示的 mysqli 函数一起显示!
【解决方案2】:

为了外语支持,将数据库表对应字段整理为utf8_unicode_ci

【讨论】:

【解决方案3】:

尝试将列排序规则设置为:utf8_polish_ci

示例:

some_field VARCHAR(100) NULL DEFAULT NULL COLLATE 'utf8_polish_ci',

【讨论】:

    【解决方案4】:

    使用 mysql 的用户可以将此行添加到他们的连接部分以修复特殊字符显示问题

    mysql_set_charset('utf8',$link);
    

    对于mysqli用户来说是

    mysqli_set_charset($link,"utf8");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多