web-dev-qa-db-ja.com

PHP文字列から特殊文字を削除

特殊文字の削除に問題があります。 「()/。%-&」以外のすべての特殊文字を削除したいのは、その文字列をタイトルとして設定しているからです。

元のコードを編集しました(下を参照)。

preg_replace('/[^a-zA-Z0-9_ -%][().][\/]/s', '', $String);

しかし、これは、「’s」、「“」、「â€」などの特殊文字を削除するために機能していません。

元のコード:(これは機能しますが、これらの文字を削除します: "()/。%-&")

preg_replace('/[^a-zA-Z0-9_ -]/s', '', $String);
29
user453089

ドットはすべての文字に一致しています。次のように、エスケープします(および他の特殊文字)。

preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $String);
52
Luke Sneeringer
preg_replace('#[^\w()/.%\-&]#',"",$string);
13
Thomas Hupkens

がんばったね!いくつかの小さな変更を加える必要があると思います。

  • 文字クラス内の角括弧([および])をエスケープします(これらも[および]で示されます)
  • エスケープ文字(\)自体をエスケープします
  • さらに、-が特別な癖があります。2文字の間にある場合は範囲​​を意味しますが、先頭または末尾にある場合は、リテラルの-文字を意味します。

次のようなものが必要です。

preg_replace('/[^a-zA-Z0-9_%\[().\]\\/-]/s', '', $String);

このトピックをさらに読みたい場合は、 http://docs.activestate.com/activeperl/5.10/lib/pods/perlrecharclass.html#special_characters_inside_a_bracketed_character_class を参照してください。

5
Anonymoose

str replace が必要です。これは、パフォーマンス面ではmuch安く、なおかつニーズに合っているためです!

$title = str_replace( array( '\'', '"', ',' , ';', '<', '>' ), ' ', $rawtitle);

(これがセキュリティとsqlインジェクションに関するすべての場合を除き、その場合は、許可された文字の正のリストを使用することをお勧めします。さらに良いのは、テスト済みの実証済みのルーチンを使用することです。)

ところで、OPはタイトルの設定について話していたので、特別な文字を空白ではなく何も置き換えません。余計なスペースは、2つの単語を接着するよりも問題になりません...

4
Frank Nocke
<?php
$string = '`~!@#$%^&^&*()_+{}[]|\/;:"< >,.?-<h1>You .</h1><p> text</p>'."'";
$string=strip_tags($string,"");
$string = preg_replace('/[^A-Za-z0-9\s.\s-]/','',$string); 
echo $string = str_replace( array( '-', '.' ), '', $string);
?>
2
dinhhiepdung
mysqli_set_charset($con,"utf8");
$title = ' LEVEL – EXTENDED'; 
$newtitle = preg_replace('/[^(\x20-\x7F)]*/','', $title);     
echo $newtitle;

Result :  LEVEL EXTENDED

Mysql接続コードの下に適用することで、多くの奇妙なキャラクターを削除できます。しかし、このタイプのような奇妙な文字を削除するいくつかの状況では、上記の形式のpreg_replaceを使用できます。

0
Solomon
preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $String);
0
Alex