私はthis質問を参考にしています。私の問題は、文字列を16進数にエンコードしていますが、それがデータベースに書き込まれるとデコードしないことです。SQL Serverエスケープ文字列
HTMLのtextareaの
<textarea class="form-control" rows="5" name="nomInfo[]" id="appNom" placeholder="Additional Information"></textarea>
POST値を取得し、例えば、テキストエリアにggfdgdfg/fdg.fdgdf.gdf "fdskfdskfds;fsd ' sdfds' fds/f%
におけるI型の場合は、フォームを提出し、これが書き込まれているので、DB
function mssql_escape($data) {
if(is_numeric($data))
return $data;
$unpacked = unpack('H*hex', $data);
return '0x' . $unpacked['hex'];
}
$nomInfo = $_POST['nomInfo'][0];
$nomInfoDecode = mssql_escape($nomInfo);
$query = "INSERT INTO dbo.emp_recog (nomInfo) VALUES (";
$query .= "'" . $nomInfoDecode . "');";
に挿入データベース0x67676664676466672f6664672e66646764662e676466205c226664736b6664736b6664733b667364205c272073646664735c27206664732f6625
これはやり過ぎのように思えます。編集:あなたの質問に答えるには、$クエリのものの2行目のアポストロフィを削除します。例えば、 – ZLK
。 '$ query。=" '" $ nomInfoDecode。 "');"; ' - >' $ query。= $ nomInfoDecode。 ");"; "アポストロフィは文字通り、その16進数値が表すものとは対照的に、 '0x67676664676466672f6664672e66646764662e676466205c226664736b6664736b6664733b667364205c272073646664735c27206664732f6625'になります。 – ZLK
それは理にかなって正しいと思われますが、何らかの理由で、あなたが言ったことを正確に行った後も、16進文字列をデータベースに書き込んでいます。 @ ZLK – collint25