0

HTML 入力フィールドに入力するデータ文字列のフォーマットに問題があります。これが私のクエリです:

$sql_active = "SELECT * FROM table WHERE id='$id'";
$result_active = $mysqli->query($sql_active);
$row = mysqli_fetch_array($result_active);
$job_description = stripslashes($row['job_description']);

次に、$job_description 変数を使用してページに情報を表示します。ページの後半に、情報を入力する必要がある非表示のフォーム フィールドがあります。だから私はこれを行います:

<input type="hidden" name="description" value="<?php echo $mysqli->real_escape_string($job_description); ?>" />

問題は、ユーザーが最初に説明フィールドを入力するときに、引用符、二重引用符などを (好きなように) 使用できることです。ここにあるこの 1 つの例では、情報が引用符を超えることを許可していません。次のように表示されます。

<input type="hidden" name="description" value="PLEASE NOTE: YOU MUST HAVE EXPERIENCE\r\n\r\nOne of the city\'s best employers. Basic \" handyman\" repair skills preferred. ">

最初のアポストロフィに当たるとエスケープしますが、ユーザーがアポストロフィと引用符の両方を使用しているため、混乱します。

4

1 に答える 1

3

あなたはエスケープの目的を完全に誤解しています。これらの関数は目的に固有のものです。HTML コンテキストに出力する場合、SQL エスケープ シーケンスを実行しても意味がありません。HTML は SQL スタイルのエスケープを使用せず、SQL も HTML スタイルのエスケープを使用しないためです。目の前の仕事に適したツールを使用できます。HTML を実行しているので、htmlspecialchars() を使用する必要があります。

<input ... value="<?php echo htmlspecialchars($job_description) ?>" />
                             ^^^^^^^^^^^^^^^^

フォームが送信され、その送信されたデータを SQL コンテキストで使用している場合にのみ、SQL エスケープを使用します。

于 2013-08-15T19:43:40.167 に答える