不显示外来字符和特殊字符


foreign and special characters not displaying

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

由于某种原因,特殊的外国字符不会显示,而仅在网站的某些部分显示。

像ł,ą,ó等字符

。问题是它们完美

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

我已经检查了数据库中的表,它存储为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>
确保在

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);
}

正如手册所说:

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

对于外语支持,将数据库表的相应字段的排序规则设置为utf8_unicode_ci

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

例:

some_field VARCHAR(100) 空默认空排序规则 'utf8_polish_ci',

那些

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

mysql_set_charset('utf8',$link);

对于 Mysqli 用户来说,这将是

mysqli_set_charset($link,"utf8");