これは以前の投稿とほぼ同じですが、これは別の質問です。ハイパーリンク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']);
この作品を思いつきました! =)しかし、それは最も効率的な方法です...?
もっと簡単な例を作ることができますか?私は$ this-> post ['message']がどこに変換されるのかわかりません。変数がで終わる場合、rtrimは明らかに動作しません。 – Richard
私はOPに何かを追加して、より良いフォーマットにします。何をもっと必要としますか? –
少しの例が追加されました –