特殊文字の削除に問題があります。 「()/。%-&」以外のすべての特殊文字を削除したいのは、その文字列をタイトルとして設定しているからです。
元のコードを編集しました(下を参照)。
preg_replace('/[^a-zA-Z0-9_ -%][().][\/]/s', '', $String);
しかし、これは、「’s」、「“」、「â€」などの特殊文字を削除するために機能していません。
元のコード:(これは機能しますが、これらの文字を削除します: "()/。%-&")
preg_replace('/[^a-zA-Z0-9_ -]/s', '', $String);
ドットはすべての文字に一致しています。次のように、エスケープします(および他の特殊文字)。
preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $String);
preg_replace('#[^\w()/.%\-&]#',"",$string);
がんばったね!いくつかの小さな変更を加える必要があると思います。
[
および]
)をエスケープします(これらも[
および]
で示されます)\
)自体をエスケープします-
が特別な癖があります。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 を参照してください。
str replace が必要です。これは、パフォーマンス面ではmuch安く、なおかつニーズに合っているためです!
$title = str_replace( array( '\'', '"', ',' , ';', '<', '>' ), ' ', $rawtitle);
(これがセキュリティとsqlインジェクションに関するすべての場合を除き、その場合は、許可された文字の正のリストを使用することをお勧めします。さらに良いのは、テスト済みの実証済みのルーチンを使用することです。)
ところで、OPはタイトルの設定について話していたので、特別な文字を空白ではなく何も置き換えません。余計なスペースは、2つの単語を接着するよりも問題になりません...
<?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);
?>
mysqli_set_charset($con,"utf8");
$title = ' LEVEL – EXTENDED';
$newtitle = preg_replace('/[^(\x20-\x7F)]*/','', $title);
echo $newtitle;
Result : LEVEL EXTENDED
Mysql接続コードの下に適用することで、多くの奇妙なキャラクターを削除できます。しかし、このタイプのような奇妙な文字を削除するいくつかの状況では、上記の形式のpreg_replaceを使用できます。
preg_replace('/[^a-zA-Z0-9_ \-()\/%-&]/s', '', $String);