2

私はこの毎日のデータ フィードを使用しています。驚いたことに、MySQL にあるとフィールドが正しく表示されませんでした。(誰がフィードを提供するかは、私には制御できません。)

そこで、mysqldump を実行したところ、このレコードの郵便番号と市区町村に非印刷文字が含まれていることがわかりました。「vi」で次のように表示しました: <200e>

私は PHP で作業しており、このデータを解析して MySQL データベースに入れています。これでトリム機能を使用しましたが、それは取り除かれません。問題は、MySQL データベースの郵便番号に対してクエリを実行すると、印刷されていない文字を含むレコードが見つからないことです。

MySQL データベースに入れる前に、これをクリーンアップしたいと思います。

PHPで何ができますか?最初は、正規表現は az、AZ、および 0-9 のみを許可するものだと思っていましたが、それはアドレスには適していません。住所には、ピリオド、コンマ、ハイフン、およびおそらく現時点では考えていないその他のものが使用されています。

最善のアプローチは何ですか?文字の印刷のみを許可する以外に、それを正確に定義するために何と呼ばれているのかわかりません。この仕事をするトリムのような別のPHP関数はありますか? それとも正規表現?もしそうなら、私は例が欲しいです。ありがとう!

PHP関数の使用を調べたところ、これがPHP.NETに投稿されているのを見ました:

<?php
$a = "\tcafé\n";
//This will remove the tab and the line break
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);
//This will remove the é.
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
?>

FILTER_FLAG_STRIP_HIGH を使用すると、'vi' で見られると述べた <200e> が実際に取り除かれますが、André などの名前で文字のアクセントが取り除かれるのではないかと懸念しています。

多分正規表現が解決策ですか?

4

4 に答える 4

4

PHP フィルターを使用できます: http://www.php.net/manual/en/function.filter-var.php

FILTER_SANITIZE_STRINGフィルター、または必要なものに合ったものを使用することをお勧めします。

于 2012-11-08T19:31:46.603 に答える
2

この小さな正規表現の置き換えを使用できると思います:

preg_replace( '/[^[:print:]]+/', '', $your_value);

基本的に、 $your_value からすべての非印刷文字を取り除きます

于 2012-11-08T19:32:11.813 に答える
1

私はこれを試しました:

<?php
$string = "\tabcde éç ÉäÄéöÖüÜß.,!-\n";
$string = preg_replace('/[^a-z0-9\!\.\, \-éâëïüÿçêîôûéäöüß]/iu', '', $string);
print "[$string]";

それは与えました:

[abcde éç ÉäÄéöÖüÜß.,!-]

必要なすべての特殊文字を正規表現に追加します。

于 2012-11-08T22:10:33.817 に答える
0

英語で作業していて、Unicode 文字をサポートする必要がない場合は、[\x20-\x7E]

...そして他のすべてを削除します:

$s = preg_replace('/[^\x20-\x7E]+/', '', $s);
于 2012-11-08T19:28:15.540 に答える