1

私は従来の ASP で作業しており、MS SQL 2008 データベースにユーザー入力を単純に挿入しようとしています。これは私が基本的に毎日行っていることですが、これまでにこのバグを経験したことはないと思います。

私が得ているバグは、ユーザーがバックスラッシュでテキスト行を終了し、その下で新しい行を開始すると、データが DB に保存された後にバックスラッシュと改行の両方が失われることです。

ASPファイルからハードコードされた次のステートメントを試してみると:

UPDATE TBLarticle_text SET Introduction = 'Text on first line \" & vbCrLf & " text on second line' WHERE ArticleGuid = 28

結果のデータには、バックスラッシュや改行がありません。変数に格納され、ページに出力される場合、文字列は正しいです。

これはユーザー入力の例です (通常はフォームからですが、実際には関係ありません)。入力:

Text on first line \
text on second line

... 次のように保存されます。

Text on first line  text on second line

バックスラッシュの後に改行以外が続く場合、問題はありません。

4

2 に答える 2

0

同様の問題が発生しています。これを回避する最善の方法は、ASP がそのような文字列を SQL Server に渡さないようにすることです。その文字シーケンスを置き換えて、そのような行の最後にスペースを挿入するだけで、これをクリーンアップできます (ユーザーが気付く可能性はほとんどありません)。

sql = REPLACE(sql, "\" & vbCrLf, "\ " & vbCrLf)

この動作を確認するために ASP または VBScript を使用する必要はありません。

CREATE TABLE #floobar(i INT, x VARCHAR(255));

INSERT #floobar SELECT 1, 'foo \
bar';
INSERT #floobar SELECT 2, 'foo \\
bar';
INSERT #floobar SELECT 3, 'foo 
bar';

SELECT * FROM #floobar;

この文字シーケンスを特別に扱わないように Microsoft にこれを修正してもらうかどうかはわかりません。そのため、「修正」はそれを回避することになります。また、従来とは異なる CR/LF、たとえば CHR(10) や CHR(13) 、または vbTab (Chr(9)) などにも注意する必要があります。

于 2012-06-05T15:56:14.540 に答える