質問

には、どうするのがベストなのに置き換えることは'<'と &lt; 与えられたデータベースのカラム?基本的に行 s/&lt[^;]/&lt;/gi

注記:

  • 働かなければならな MS SQLサーバー 2000
  • 必ず繰り返しではないで終わ &lt;;;;;;;;;;)
役に立ちましたか?

解決

一部のハッキングに必要なものができること のように, PATINDEX, や古き良き文字列を連結した.

create table test
(
    id int identity(1, 1) not null,
    val varchar(25) not null
)

insert into test values ('&lt; <- ok, &lt <- nok')

while 1 = 1
begin
    update test
        set val = left(val, patindex('%&lt[^;]%', val) - 1) +
                      '&lt;' +
                      right(val, len(val) - patindex('%&lt[^;]%', val) - 2)
    from test
    where val like '%&lt[^;]%'

    IF @@ROWCOUNT = 0 BREAK
end

select * from test

よこはSQLサーバーのバージョンagnosticとで十分に作動するのです。

他のヒント

別のSTUFFを使用すれば、これはずっときれいにできると思います:)

create table test
(
    id int identity(1, 1) not null,
    val varchar(25) not null
)

insert into test values ('&lt; <- ok, &lt <- nok')

WHILE 1 = 1
BEGIN
    UPDATE test SET
        val = STUFF( val , PATINDEX('%&lt[^;]%', val) + 3 , 0 , ';' )
    FROM test
    WHERE val LIKE '%&lt[^;]%'

    IF @@ROWCOUNT = 0 BREAK
END

select * from test

方法:

    UPDATE tableName
    SET columName = REPLACE(columName , '&lt', '&lt;')
    WHERE columnName LIKE '%lt%'
    AND columnName NOT LIKE '%lt;%'

編集:

これにより、部分的に正しい&amp; lt; 文字列を持つ列が無視されることに気付きました。

その場合、where句の2番目の部分を無視して、後でこれを呼び出すことができます。

    UPDATE tableName
    SET columName = REPLACE(columName , '&lt;;', '&lt;')

この記事 SQL 2000(および2005で簡単に調整できる)で使用できる、簡単な正規表現置換関数を作成する方法について説明します。

MSSQLの正規表現フレーバーがネガティブルックアヘッドをサポートしている場合、これがアプローチの正しい方法になります。

s/&lt(?!;)/&lt;/gi

&amp; lt のすべてのインスタンスをキャッチしますが、その後に; が続きます(何も続かない場合でも、 [^;] は見逃します)マッチの一部として次の非; 文字をキャプチャせず、置換で失われるその文字の元の質問に関するコメントで言及された問題を排除します。

残念ながら、私はMSSQLを使用していないので、ネガティブ先読みをサポートしているかどうかわからない...

このパターンに非常に固有ですが、過去にこれと同様のことをしました:

REPLACE(REPLACE(columName、 '&amp; lt;'、 '&amp; lt')、 '&amp; lt'、 '&amp; lt;')

より広範な例(TITLE属性で不適切な可能性のある文字をエンコードする)

REPLACE(REPLACE(REPLACE(REPLACE(
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    columName
    -- Remove existing encoding:
    , '&amp;', '&')
    , '&#34;', '"')
    , '&#39;', '''')
    -- Reinstate/Encode:
    , '&', '&amp;')
    -- Encode:
    , '"', '&#34;')
    , '''', '&#39;')
    , ' ', '%20')
    , '<', '%3C')
    , '>', '%3E')
    , '/', '%2F')
    , '\', '%5C')
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top