页面刷新时丢失语音标记

时间:2011-08-09 14:49:36

标签: php mysql

我使用php和mysql构建了一个类别导航系统。

$query = "SELECT category_name, category_desc FROM categories";
$result = mysql_query($query, $dbc)
or die (mysql_error($dbc));

while($row = mysql_fetch_array($result)) {

$catname = $row["category_name"];
$catdesc = $row["category_desc"];

echo "<li><a href='getsubs.php?category=$catname'>$catname<br /><span>$catdesc</span></a></li>";

此代码为我提供了数据库中的类别列表。

单击这些类别并请求getsubs.php文件时:

$category= $_GET['category'];

$query = "SELECT subcategory_name FROM subcategories WHERE subcategory_parent = '$category'";
$result = mysql_query($query, $dbc)
or die (mysql_error($dbc));

while($row = mysql_fetch_array($result)) {

$subcatname = $row["subcategory_name"];

echo "<li><a href='getsubsubs.php?category=$subcatname'>$subcatname</a></li>";

$category = mysql_real_escape_string($_GET['category']);

}

页面其余部分的文本(不是数据库驱动的)丢失了基本级别的任何语音标记/引号(“)。有没有人知道为什么会这样?

非常感谢提前。

编辑:之前和之后:

Before

After

2 个答案:

答案 0 :(得分:1)

由于unicode编码问题,这些?经常出现。您的表subcategoriescategories可能有不同的排序规则。一个可能是unicode品种之一,另一个选择较少。试试这个来快速解决问题:

-- in the top query:
SELECT 
    category_name COLLATE latin1_swedish_ci, 
    category_desc COLLATE latin1_swedish_ci
FROM categories

-- in the bottom query
SELECT subcategory_name COLLATE latin1_swedish_ci 
   FROM subcategories WHERE subcategory_parent = '$category'"

更正确的方法是更改​​两个表以使用相同的排序规则和/或使用<meta>标记调整编码输出。 (像<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />这样的东西可能会这样做)

(顺便说一下,我或多或少要注意你应该在数据库输入周围使用mysql_real_escape_string

答案 1 :(得分:0)

问题与我的字符编码无关,在检查时它们都是正确的。问题是我一直在使用不同类型的引号,我仍然无法在键盘上找到它。

引用类型1 =“(这个引起了问题)
引用类型2 =“(这可以在mac上的右移键上方找到)

文本已从另一个包含这些奇怪引号的文件中复制并粘贴。 如果有人知道这个替代标记来自何处,那么了解未来是有用的。

非常感谢所有投入的人。