2

内容を変更できないデータベースを受け取りました。リンクを介して URL のいくつかの変数を渡すまでは、すべてうまくいっていましたが、変数の 1 つ (つまり、"Frank's Used Cars") のアポストロフィが原因で、その背後にある変数が渡されませんでした。

これは現在渡されているものです:

&var1=600&miles=44000&var2=Frank

次のようになります。

&var2=600&miles=44000&var2=Frank's%20Used%20Cars%20&var3=111111111

私が言ったように、問題はアポストロフィにあります。PHP myadmin のデータベースの「ディーラー」フィールドを「utf8_swedish_ci」に変更してみました。また、MySQL 接続照合で「latin1_swedish_ci」からこれに変更しました。

明らかに、アポストロフィを取り除けば、すべてうまくいきますが、これはできません。どんな助けでも素晴らしいでしょう!

                            echo"<td>";
                echo$row->var1;
            echo"</td>";
            echo"<td>";
                echo$row->var2;
            echo"</td>";
            echo"<td>";
                echo$row->dealer;
            echo"</td>";
            echo"<td><a href='look.php?price=$row->price&miles=$row->miles&dealer=$row->dealer'>More Info</a>

動的 URL リンク:

echo"<td>";
                $url="look.php?make=".urlencode($row->make)."&model=".urlencode($row->model)."&colour=".urlencode($row->colour)."&Reg=".urlencode($row->Reg)."&miles=".urlencode($row->miles)."&price=".urlencode($row->price)."&region=".urlencode($row->region)."&miles=".urlencode($row->miles);
            echo"$urlHTML=htmlspecialchars($url)"; 
            echo "<a href=\"$urlHTML\">More Info</a>";
            echo"</td>";
4

4 に答える 4

1

SQL インジェクション、urlencode について言及されていますが、どの時点でデータが壊れているのか、質問からは明らかではありません。

しかし、解決策は、壊れている場所に関係なく同じです。

  1. PHP を離れる時点で常にデータをエスケープする
  2. どこに行くかに基づいてデータをエスケープするための適切な方法を常に使用する

URL にデータを書き込むには、urlencode を使用します。

HTML にデータを書き込むには、htmlentities() を使用します。

データを XML に書き込むには、htmlspecialchars ()を使用します。

文字列データを 7 ビットの電子メールに書き込むには、quoted_printable_encode() を使用します。

バイナリ データを電子メールに書き込むには、電子メールを MIME および base64 でデータをエンコードするか、uuencode() を使用します。

データを MySQL クエリ文字列に書き込むには、mysql[i]_real_escape_string() またはパラメーター バインディングを使用します。

...

于 2013-08-19T12:49:56.517 に答える
0

まず、URLでエスケープする必要のある文字がいくつかあるため、urlencodeを使用してURLを作成します。

$url="look.php?price=".urlencode($row->price).
   "&miles=".urlencode($row->miles).
   "&dealer=".urlencode($row->dealer);

これにより、URLが意図したとおりに機能するようになります。これで特定の問題が解決するはずですが、有効なHTMLを作成したい場合(そしてなぜそうしないのですか!)、そのURLをhtmlspecialcharsを使用してHTML用にエンコードします。

$urlHTML=htmlspecialchars($url); 
echo "<td><a href=\"$urlHTML\">More Info</a>";
于 2012-04-12T07:59:44.103 に答える
0

この関数を参照してください。URL文字列を構築した後、問題が発生しないように自動的にエスケープできるようになります-または他の多くの人がそれを好みます.

于 2012-04-11T22:38:49.723 に答える
-2

試してみてください: $code = str_replace("'", "\'", $code);

于 2012-04-11T22:42:41.740 に答える