2016-11-29 10 views
0

:ここで例えばにpreg_replaceと隠された文字や隠されたエンコーディング

(\>*\s?)_______________________________________________\n(\>*\s?)(talk|tagging|talk-us|talk-gb|talk-de|osm-talk) mailing list\n(\>*\s?)(talk|tagging|talk-us|talk-gb|talk-de|osm-talk)@openstreetmap.org\n(\>*\s?)https://lists.openstreetmap.org/listinfo/(talk|tagging|talk-us|talk-gb|talk-de|osm-talk) 

は、それはすべてのメーリングリスト-署名を削除します。

>> Text, blablabla 
>> 
>> _______________________________________________ 
>> talk mailing list 
>> [email protected] 
>> https://lists.openstreetmap.org/listinfo/talk 
> 
> 
> 
>------------------------------------------------------------------------ 
> 
>_______________________________________________ 
>talk mailing list 
>[email protected] 
>https://lists.openstreetmap.org/listinfo/talk 

-- 
personal signature, blabla._______________________________________________ 
talk mailing list 
[email protected] 
https://lists.openstreetmap.org/listinfo/talk 

しかし、私がpreg_replaceを使ってPHPで正確に同じことをしようとすると、3つのメーリングリスト署名のうち最後のものだけが削除されます。そして、それは与えられた変数でのみです。私は、ブラウザに変数の内容をエコーし​​、$text = 'long echoed text'のような新しい変数にコピーすると動作します。

$slugs = 'talk|tagging|talk-us|talk-gb|talk-de|osm-talk';    
$pattern = '!(\>*\s?)_______________________________________________\n(\>*\s*)('.$slugs.') mailing list\n(\>*\s*)('.$slugs.')@openstreetmap.org\n(\>*\s*)https://lists.openstreetmap.org/listinfo/('.$slugs.')!mi';    
return preg_replace($pattern,'',$text); 

だから、元の変数に隠れたエンコーディングや隠し文字があるはずです。しかし、どのようにして問題を見つけ出すことができますか?

編集:それ以降は改行に問題があり、後で>のように私を探しますが、私はそれを正確にどのようにチェックして解決するのかまだ分かりません。

EDIT2:私は($テキストは、元の$テキスト2は、エコー$テキストの結果である)$テキスト== $のテキスト2をしようとしたとき、私はFALSE

TLを得る; DR:私は与えられたを使用する場合変数それは動作しません。しかし、私は変数をブラウザにエコーすると、テキストを新しい変数にコピーすると動作します。何がそこに隠されていますか?

+0

エンコーディングに問題がある場合は、uモディファイアを使用してみてください。 –

+0

http://ideone.com/BdG43Y –

+1

はい、phpliveregexのように動作します。私は変数にテキストを置いたときのようです(申し訳ありませんが、全体の質問を読んだこともありますか? )。私は私の質問を更新しました。それは、別の正規表現で同様の問題があるので、改行のあるもののように見えます。 – Asara

答えて

1

今、上記の式は、 "\ n"としてエンコードされた改行に一致します。ただし、改行は環境に応じて "\ n"、 "\ r"、 "\ r \ n"としてエンコードすることもできます。だからではなく、\ nは、あなたが使用する必要があります。

[\n\r]+ 

this questionWikipedia上の対応する記事を参照してください。

+1

あなたの答えがありがとう、私はちょっと前にjson_decode()を使って見つけました:)しかし、とにかく、正しい。そのような問題を抱える他の人々のために、json_decode()を文字列に使用すると、すべての隠し文字が表示されます – Asara

関連する問題