2017-10-27 11 views
0

私はpreg_replaceを使用していくつかの機能を作成しました。コードは、そのプレビューを取得することです。私はこのURL https://instagram.com/p/BarUcqwht_uリンクURLをフィルタリングする方法http://とwwwをpreg replaceと置き換えます

でInstagramのを投稿した場合

は、私はこのコード

$strings  = htmlspecialchars_uni($thread['soc_instagram']); 
$searchs  = array('~(?:https://instagram\.com/p/)?([a-zA-Z0-9_\-+?:]+)~'); 
$replaces = array('https://instagram.com/p/$1/media/?size=l'); 
$soc_instagram = preg_replace($searchs,$replaces,$strings); 

完璧なコードの仕事を作り、それがコード

https://instagram.com/p/BaQsAubg6H3/media/?size=l 

生成されますが、問題は、私際には、 URLにWWWを追加しようとすると、https://www.instagram.com/p/BarUcqwht_uのコードでエラー文字列

が生成されます。

、感謝

+0

Sooo ....(www)が1回または0回あるかどうかを確認する必要がありますか? –

答えて

0

結果は私にpreg_replaceコードにWWWを追加しようと、この

https://instagram.com/p/https:/media/?size=l//https://instagram.com/p/www/media/?size=l.https://instagram.com/p/instagram/media/?size=l.https://instagram.com/p/com/media/?size=l/https://instagram.com/p/p/media/?size=l/https://instagram.com/p/BarUcqwht_u/media/?size=l/ 

のようになりますが、結果は任意の助けがいいでしょう。この

https://www.instagram.com/p/https:/media/?size=l//https://www.instagram.com/p/instagram/media/?size=l.https://www.instagram.com/p/com/media/?size=l/https://www.instagram.com/p/p/media/?size=l/https://www.instagram.com/p/BaQsAubg6H3/media/?size=l 

のようになりますプロトコルの後にwww.を追加し、オプションにします。 preg_replaceも配列を必要としません。文字列は正常に動作します。

$strings  = 'https://www.instagram.com/p/BarUcqwht_u'; 
$searchs  = '~(?:https://(?:www\.)?instagram\.com/p/)?([a-zA-Z0-9_\-+?:]+)~'; 
$replaces = 'https://instagram.com/p/$1/media/?size=l'; 
$soc_instagram = preg_replace($searchs,$replaces,$strings); 
echo $soc_instagram; 

デモ:https://3v4l.org/WSors

何あなたの現在の実装ではないことはURLを使って文字クラスに記載されていない置き換え文字です。視覚的な表現については、https://regex101.com/r/PXb2h1/2/を参照してください。

+0

ありがとう –

関連する問題