>我有一个波兰语的电子商务网站,产品类别存储在数据库中(波兰语)
由于某种原因,特殊的外国字符不会显示,而仅在网站的某些部分显示。
像ł,ą,ó等字符
。问题是它们完美地显示在类别页面的主体中,但它们也作为替代导航显示在页面的左侧,正是这个左侧导航它们没有正确显示......他们显示为 ?或
我已经检查了数据库中的表,它存储为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");