0

ASCII 制御文字は、私が定期的に管理しているデータベースに侵入しています。INSERTそれらが SQL に組み込まれないようにする手段を実装する予定ですが、データベースに既に存在する文字を最初に処理する必要があります。

手始めに、SQLを使用して検索と置換を行うことが可能であることを知っています...

UPDATE [table_name] 
SET [field_name]=REPLACE([field_name],'[string_to_find]','[string_to_replace]');

PHP では、配列を使用して複数の項目を別のものに置き換えることができます...

$result = str_ireplace(array('1','2','3','4','5'),'0',$my_string);

では、ループ内の怠惰な SQL クエリの代わりに、SQL クエリを作成して複数の ASCII 制御文字を置き換える方法はありますか?

また、これらの制御文字をどのように置き換えるか (10 進数、10 進数、16 進数など)も非常に重要です。

また、キャリッジ リターンは制御文字 0 ~ 31 の一部であることを読んだので、明らかに改行が保持されていることを確認するためにそれらを削除したくありません。

これは私が今行っている参照ページです...

http://www.ascii-code.com/


XHTML を application/xhtml+xml としてコーディングし、以下をexample1.xhtmlとしてテストし、バイト オーダー マーク (BOM)なしでFirefoxで明示的に開きます ...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
</head>

<body>

<div>
<p>&#000;&#001;&#002;&#003;&#004;&#005;&#006;&#007;&#008;&#009;
&#010;&#011;&#012;&#013;&#014;&#015;&#016;&#017;&#018;&#019;
&#020;&#021;&#022;&#023;&#024;&#025;&#026;&#027;&#028;&#029;
&#030;&#031;</p>
</div>

</body>
</html>

不正XMLを作成せずに使用できる文字は次のとおりです

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
</head>

<body>

<div>
<p>&#009;&#010;&#013;</p>
</div>

</body>
</html>

SQL で削除したくない作業文字は...

  • 09 - 水平タブ

  • 10 - 改行

  • 13 - キャリッジ リターン

4

1 に答える 1

0

これは初心者には機能しますが、必ずしも大量に機能するとは限りません...

UPDATE a_log SET useragent=replace(useragent,char(4),'');
UPDATE a_log SET useragent=replace(useragent,char(5),'');

私が最初にしたことは、Firefox から XML 解析エラーをコピーすることでした。Windows 7 のクリップボード、コピー アンド ペーストの実行中に ASCII 制御文字を適切に保持します。次に、問題のあるテキストをこの Web サイトのフォームに貼り付けました...

http://www.asciivalue.com/

このサイトの文字を参照するためにDECOCT (それらの列の値が一致した)を使用した行を見つける...

http://www.ascii-code.com/

...少し調査した後、いくつかの行をまとめて、問題のある文字を一掃し、最終的に XML の形式を変えることができました。

ポイントは、より多くのドラグネットスタイルの修正であるため、私はまだより良い答えを受け入れます。さらに、これは残念ながら、最初から ASCII 制御文字が MySQL に挿入されるのを防ぐための対策を作成、テスト、および実装しなければならない問題に対する反動的なスタンスであることを積極的に認めています。したがって、私はまだこの問題を防ぐためのよく書かれた方法を探しています。

誰かが同じ質問をしてそれに出くわした場合、少なくとも問題を解決するための効果的な手段を持っています。

于 2014-02-21T20:18:54.573 に答える