2011-08-09 7 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']); 

} 

(データベース駆動型ではありません)ページの残りの部分のテキストは任意の音声マーク/引用符( ")を失います。?。どの基地レベルで存在していたいずれかが、これはあるかもしれない理由を任意のアイデアを持っています

多くのおかげで、事前に

EDIT:前と後:

Before

After

+2

「スピーチマーク」は何? 見積もり (")?同様に、あなたのコードはSQLインジェクション攻撃に対して広く開かれています...なぜあなたはループ内のカテゴリ値をエスケープしていますか?クエリは実行されたのですか? –

+0

ええ引用(常に彼らにスピーチマークと呼ばれる)。 –

+0

@Marc Bまだ学んでいます... mysql_real_escape_stringは$ category = $ _GET ['category']の直後に来るべきですか? ?私はそれについて少し戸惑うことが分かりました。 –

答えて

0

問題は私の文字エンコーディングとは何の関係もなかった(余談として、私は、多かれ少なかれ、あなたのDB入力周りmysql_real_escape_stringを使用すべきであると発言しなければなりません)それはチェック時にすべて正しいものでした。問題は、キーボードではまだ見つけられない別のタイプの引用符を使用していたことでした。

引用1型=「(これは問題を引き起こしていた)
引用タイプ2 = "

テキストをコピーしてから貼り付けていた(これはMacの右シフトキー上に見出すことができます)これらの奇妙な引用符が含まれて別のファイル。 この代替マークがどこから来たのか、誰もが知っている場合、将来のために知っておくと便利でしょう。すべての入力男性のための

感謝します。

+1

引用符タイプ2は「タイプライター」の引用です。タイプ1は "実"引用符、開いた "中括弧"引用符です。 Macでタイプしたい場合は、メモリから、Alt + [とShift + Alt + [。一重引用符の場合は、[]キーで同じトリックを使用します。あなたが必要とするよりも多くの情報については、[Wikipediaの引用符のグリフに関するエントリー](http://en.wikipedia.org/wiki/Quotation_mark_glyphs)を参照してください。あなたがUTF8を使用している場合、 "縮められた"引用符が問題を引き起こす理由はありません - あなたが見ることができるように、Stack Overflowはうまくそれらに対処します。 –

+0

@Matt Gibsonありがとうマット!すべてがUTF8に設定されていますが、まだ実際の引用符を取得することはできません。すべてのテーブルのすべての列はutf8_unicode_ciに設定されています。次に、私のメタは次のようになります。

1

もの?はしばしばUnicodeエンコーディングの問題の現れ。テーブルsubcategoriescategoriesの照合順序が異なる可能性があります。 1つはおそらくユニコードの品種の1つであり、もう1つはオプションの数が少ないです。簡単な修正のためにこれを試してみてください:

-- 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" />はおそらくそれを行うだろう)

+0

すばらしい答えをありがとう。私はむしろ、迅速な修正を使用するよりも最初に正しい結果を得ることができますが、私がそれを行うことができることを知ることは素晴らしいことです。ありがとう。私は両方のテーブルの照合順序を変更することを検討します:0) –

+2

@richardまた、Joel Spolskyの[各ソフトウェア開発者の絶対的な最小値、絶対にUnicodeと文字セットについて知っておく必要があります。 www.joelonsoftware.com/articles/Unicode.html)を参照してください。 –

+0

@Mattここにここ! – cwallenpoole

関連する問題