2011-08-09 133 views
0

我已经建立了一个使用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

什么是“讲话标志” ?报价(“)?另外,你的代码对于SQL注入攻击是开放的......为什么在查询执行后,你在循环内部转义了类别值? –

+0

是一个报价(总是叫他们的语音标记)。 –

+0

@Marc B仍然在学习......应该在$ category = $ _GET ['category'];之后直接出现mysql_real_escape_string; ?我发现它的文档有点混乱。 –

回答

0

的问题是无关我的字符编码经核对无误。问题是我一直在使用不同类型的引号,而这些引号在我的键盘上仍然找不到。

报价类型1 =“(这一项是造成问题)
报价类型2 =“

文本已经被复制并从粘贴(这可以在Mac右移键上方找到)其中载有这些奇怪的引号。 如果有人知道在哪里这种替代标记来自这将是知道未来有用的其他文件。

非常感谢您的所有输入家伙。

+1

报价类型二是“打字机”报价;第一种是“真实”的引号,开放式的“卷曲”引号。如果要在Mac上输入一个内容,请使用方括号键,并使用Alt + [和Shift + Alt + [。对于单引号,使用与[]键相同的技巧。有关您可能需要的更多信息,请参阅[维基百科在引号字形上的输入](http://en.wikipedia.org/wiki/Quotation_mark_glyphs)。例如,如果您使用UTF8,那么“卷曲”引号应该会导致问题没有任何理由 - 正如您所看到的,Stack Overflow可以很好地处理它们。 –

+0

@Matt吉布森谢谢马特!一切都设置为UTF8,但我仍然无法使真正的引号工作。所有表中的所有列被设置为utf8_unicode_ci,然后我有我的元,如下所示:

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在你的数据库输入)

+0

感谢您的回答。我宁愿第一次使用它,而不是使用任何快速修复,但要知道我能做到这一点非常好。谢谢。我会考虑改变两个表的排序规则:0) –

+2

@richard我也会阅读Joel Spolsky的[绝对最小每个软件开发人员,肯定必须知道Unicode和字符集(没有借口!)](http:// www.joelonsoftware.com/articles/Unicode.html),如果你还没有遇到它。 –

+0

@Matt这里! – cwallenpoole