1

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

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

像 ł、ą、ó 等字符。

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

我检查了数据库中的表,它存储为 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>
4

4 回答 4

4

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

$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 语句发送到服务器...它还指定服务器应该使用的字符集将结果发送回客户端。

于 2013-10-31T12:10:04.477 回答
0

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

于 2013-10-31T12:09:19.363 回答
0

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

例子:

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

于 2013-10-31T12:09:48.830 回答
0

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

mysql_set_charset('utf8',$link);

对于 mysqli 用户来说

mysqli_set_charset($link,"utf8");
于 2017-10-26T09:15:16.923 回答