1

現在 OpenCart にインポートしている 1000 個の製品のリストがあります。一部の製品タイトルには、インチを表す引用符が含まれています (例: 5")。

このクエリを使用して、これらすべての製品を正常にインポートしました。

$data['name'] = mysql_escape_string($data['name']);
$sql = "INSERT INTO ".DB_PREFIX."product-description SET language_id = '1', name = '".$data['name']."'";
$query = mysql_query($sql);

私が OpenCart にいるとき、製品のリストも問題なく表示されますが、製品を編集しようとすると、タイトル入力フィールド (タイトルを表示するためのもの) で " 記号以降のタイトルが切り取られます。

視覚的な例を次に示します。 ここに画像の説明を入力

これで、タイトルが完成したことがわかります ここに画像の説明を入力

ここでは、".

OpenCart のコーディング エラーではないことを確認できます。" を使用してインターフェイスから製品を手動で挿入すると正常に動作するためです。エラーはクエリ内にある必要があります。

クエリに問題がある場合、再挿入するのではなく、すべての製品を更新できるクエリはありますか?

4

3 に答える 3

2

openCart は、DB に保存する前に、データ内のすべての HTML をエスケープするように設計されています。したがって、次のように変更するだけです。

$data['name'] = mysql_escape_string($data['name']);

に:

$data['name'] = mysql_escape_string(htmlspecialchars($data['name'], ENT_QUOTES));
于 2012-11-07T09:33:28.143 に答える
1

OpenChart の内部はわかりませんが、この症状は非常に明確で一般的です。

ここでは、".

これは通常、最初に適切な HTML エスケープを行わずにコンテンツが HTML に渡されることを意味します。たとえば、次のような INPUT が得られます。

<input type="text" value="#VAL#" />

#VAL#必要に応じて値に置き換えられるプレースホルダーです。しかし、値が ie のTablet 7" No Name場合、HTML は次のようになります。

<input type="text" value="Tablet 7" No Name" />

これは、最初にカットされる理由を明確に説明してい"ます。解決策は、上記のエスケープを使用することです(または、より適切な名前を使用して、特殊文字をエンティティに変換します)。HTMLの場合、htmlspecialchars()関数を使用してPHPで処理できるため、SQLクエリはそれとは関係ありません-それは単なる問題ですHTML マークアップの扱いが間違っている。

エンティティが正しく処理されると、上記の例は (ソースで) 次のようになります。

<input type="text" value="Tablet 7&quot; No Name" />

これにより、ブラウザに問題が発生することはありません (さらに、ブラウザは "エンティティを として正しく表示します")。

htmlspecialchars()HTML の一般的な特殊文字の詳細については、こちらを参照してください

于 2012-11-06T19:58:44.290 に答える
-3

フォームからデータを収集するときは、すべての引用符をバックスラッシュでエスケープします\'すべての一重引用符を次のように置き換えます\'

于 2012-11-06T18:52:25.823 に答える