2016-05-12 13 views
1

これは以前の投稿とほぼ同じですが、これは別の質問です。ハイパーリンクhrefから末尾のスラッシュを削除する

私は$this->post['message']という変数を持っていますが、それはユーザーの投稿に関係なくです。ユーザー投稿の場合

Check out this vine https://vine.co/v/iF20jKHvnqg/ 

一度html出力を提出したが次のようになります。

Check out this vine <a href="https://vine.co/v/iF20jKHvnqg/" target="_blank">https://vine.co/v/iF20jKHvnqg/</a> 

、それは$this->post['message']がに等しいものです。

だから私のバックエンドで、私は、プラグイン

$drc_embed_vine = '<iframe src="https://vine.co/v/$2/embed/simple" width="480" height="480" frameborder="0"></iframe>'; 

$this->post['message'] = preg_replace('~(<a href="https?://vine.co)/v/(.*)" target="_blank">(https?://vine.co)/v/(.*)<\/a>~', $drc_embed_vine, $this->post['message']); 

を作成しているこれはポストでつるのリンクを見つけたとiframeに変換します。私は最後のスラッシュの問題に直面している。

<a href="https://vine.co/v/iF20jKHvnqg" target="_blank">https://vine.co/v/iF20jKHvnqg</a>に投稿されたhttps://vine.co/v/iF20jKHvnqgが投稿された場​​合は、iframeに変換されます。

しかし、<a href="https://vine.co/v/iF20jKHvnqg/" target="_blank">https://vine.co/v/iF20jKHvnqg/</a>に変更されたhttps://vine.co/v/iF20jKHvnqg/が投稿された場​​合、それは変換されません。違いは後続のスラッシュです。

は今、私が試してみました:

$this->post['message'] = rtrim($this->post['message'],"/"); 

$drc_embed_vine = '<iframe src="https://vine.co/v/$2/embed/simple" width="480" height="480" frameborder="0"></iframe>'; 

$this->post['message'] = preg_replace('~(<a href="https?://vine.co)/v/(.*)" target="_blank">(https?://vine.co)/v/(.*)<\/a>~', $drc_embed_vine, $this->post['message']); 

しかし、それは動作するようには思えない、私は$this->post['message']の内部つるのリンクをターゲットと最後のスラッシュを削除する、あるいはから最後のスラッシュを削除することができます方法はありそれはなる

$this->post['message'] = 'Go to <a href="http://stackoverflow.com/questions/ask/" target="_blank">http://stackoverflow.com/questions/ask/</a>'; 

あれば$this->post['message']

内部の任意のリンク

$this->post['message'] = 'Go to <a href="http://stackoverflow.com/questions/ask" target="_blank">http://stackoverflow.com/questions/ask</a>'; 

私は主にVineリンクに焦点を絞っていますが、長期的にはうまくいく可能性のあるすべてのリンクで可能な場合は、

マイ最新失敗した(私はまだこれを理解しようとしている)ちょうど私がだから、これに打撃

$str = $this->post['message']; 
$str = rtrim($str, '/'); 

$this->post['message'] = $str; 

を与えいじり 別の何かをしようとしました

$drc_embed_vine = '<iframe src="https://vine.co/v/$2/embed/simple" width="480" height="480" frameborder="0"></iframe>'; 
$str = $this->post['message']; 
$str = rtrim($str, '/'); 
$str = preg_replace('~(<a href="https?://vine.co)/v/(.*)" target="_blank">(https?://vine.co)/v/(.*)<\/a>~', $drc_embed_vine, $str); 

投稿は

<a href="http://vine.co/v/iF20jKHvnqg/" target="_blank">http://vine.co/v/iF20jKHvnqg/</a> 
です私はすべてのポストはTESTになり

$this->post['message'] = $str; 

$this->post['message'] = test; 

に変更した場合、RTRIMは何を持っている理由を0

rtrimは効果がなかった=/

が、私は見ません。効果=/

更新のための更新

$this->post['message'] = 'Check out this vine <a href="http://vine.co/v/iF20jKHvnqg/" target="_blank">http://vine.co/v/iF20jKHvnqg/</a>'; 
$drc_embed_vine = '<iframe src="https://vine.co/v/$2/embed/simple" width="480" height="480" frameborder="0"></iframe>'; 
$str = $this->post['message']; 
$str = rtrim($str, '/'); 
$str = preg_replace('~(<a href="https?://vine.co)/v/(.*)" target="_blank">(https?://vine.co)/v/(.*)<\/a>~', $drc_embed_vine, $str); 

ワーキングアップデート!

はリチャーズの答えの後、私はプラグインビットとおもちゃと

$drc_embed_vine = '<iframe src="https://vine.co/v/$2/embed/simple" width="480" height="480" frameborder="0"></iframe>'; 
$this->post['message'] = preg_replace('+/(["<])+', '$1', $this->post['message']); 
$this->post['message'] = preg_replace('~(<a href="https?://vine.co)/v/(.*)" target="_blank">(https?://vine.co)/v/(.*)<\/a>~', $drc_embed_vine, $this->post['message']); 

この作品を思いつきました! =)しかし、それは最も効率的な方法です...?

+0

もっと簡単な例を作ることができますか?私は$ this-> post ['message']がどこに変換されるのかわかりません。変数がで終わる場合、rtrimは明らかに動作しません。 – Richard

+0

私はOPに何かを追加して、より良いフォーマットにします。何をもっと必要としますか? –

+0

少しの例が追加されました –

答えて

1

を試してみてください。私はあなたの質問が複雑すぎると思うし、$ post - > ['message']の置き換えやiframeのリンクの生成を処理しているコードは表示されません。

しかし、私はあなたがそうあなたが持つことができる2つの入力がある

// input 
$user = 'Check out this vine https://vine.co/v/iF20jKHvnqg/'; 
$after = 'Check out this vine <a href="https://vine.co/v/iF20jKHvnqg/" target="_blank">https://vine.co/v/iF20jKHvnqg/</a>'; 

// todo 
$trim_user = rtrim($user, '/'); 
$trim_after = preg_replace('+/(["<])+', '$1', $after); 

// output 
echo "trim_user $trim_user\n"; 
echo "trim_after $trim_after\n"; 

を解決しようとしているという、問題を模倣するために、できるだけ単純な例を取得しようとした - から元のメッセージを$ userのユーザー、または$ afterのHTMLリンクの置き換えられたテキスト

次に、$ユーザーについては、動作するrtrimをテストしています。後の$で

、私はすべての/前の発生交換する必要がある」または<を。それが原因で、引用符のだ 『』タグで開閉。私は両方の1つの正規表現に置き換えています。

は、パラメータを参照してください。 1番目はパターンにマッチする正規表現、2番目は一致したパターンの置き換え、2番目はスラッシュをスキップし、2番目の部分のみを使用します。

[]正規表現の大括弧はグループを意味します文字の - [abc]はa、b、またはcのいずれかの文字です。範囲があれば、[az]のようにaとzの間のものです。

()は、グループの順序に基づいて$ 1、$ 2、$ 3に格納されるグループを示します。この場合、グループは1つしかないので、私はそれを$ 1と呼んでいます。

"と<からの任意の文字は、"クリップボード "$ 1に置き換えられます。これも"または< "です。

最後に、コンソールに出力を書きます。

trim_user Check out this vine https://vine.co/v/iF20jKHvnqg 
trim_after Check out this vine <a href="https://vine.co/v/iF20jKHvnqg" target="_blank">https://vine.co/v/iF20jKHvnqg</a> 

例に基づいて編集したあなたは* [^ /]で/をキャプチャ避ける代わりにすることができます。*()で。

class Example 
{ 

    public function run() 
    { 
     $this->post['message'] = 'Check out this vine <a href="http://vine.co/v/iF20jKHvnqg/" target="_blank">http://vine.co/v/iF20jKHvnqg/</a>'; 
     $drc_embed_vine = '<iframe src="https://vine.co/v/$2/embed/simple" width="480" height="480" frameborder="0"></iframe>'; 
     $str = $this->post['message']; 
     $str = rtrim($str, '/'); 
     $str = preg_replace('~(<a href="https?://vine.co)/v/([^/]*)/?" target="_blank">(https?://vine.co)/v/(.*)<\/a>~', $drc_embed_vine, $str); 

     echo $str; 
    } 
} 

$example = new Example(); 
$example->run(); 
+0

ああ、私はCMS、vBulletinを正確に使用しています。 '$ this-> post ['message']'はユーザーの投稿と同じですが、あなたの投稿をまだ読み終えています=) –

+0

これはありませんでした直接の回答ですが、私は結果=を得ました)本当に素早くそれを周りにさせてください、私はあなたに更新するために投稿します、ありがとうございます! –

+0

大胆に編集された見出しの後に答えを再度見てください。 – Richard

0

例怒鳴るを参照してください。この

$str = $this->post['message']; 
$str = rtrim($str, '/'); 
+0

この答えに基づいて、私は '$ drc_embed_vine = '