Это почти такая же информация, как и предыдущая статья, но это другой вопрос.remove trailing slash from hyperlink 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']);
Это находит виноградные ссылки в сообщениях и преобразует их в качестве фрейма. Однако я столкнулся с проблемой с косой чертой.
Если пользователь отправляет https://vine.co/v/iF20jKHvnqg
, который после отправки превращается в <a href="https://vine.co/v/iF20jKHvnqg" target="_blank">https://vine.co/v/iF20jKHvnqg</a>
, он преобразуется в штрафную iframe.
Но если пользователь отправляет https://vine.co/v/iF20jKHvnqg/
, который изменяется на <a href="https://vine.co/v/iF20jKHvnqg/" target="_blank">https://vine.co/v/iF20jKHvnqg/</a>
, он не преобразуется. Разница заключается в завершении косой черты.
Теперь я попробовал:
$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']
Итак, если
$this->post['message'] = 'Go to <a href="http://stackoverflow.com/questions/ask/" target="_blank">http://stackoverflow.com/questions/ask/</a>';
Это стало бы
$this->post['message'] = 'Go to <a href="http://stackoverflow.com/questions/ask" target="_blank">http://stackoverflow.com/questions/ask</a>';
В настоящее время я сосредоточен главным образом на связях Vine, но если это возможно для всех ссылок, которые могут работать лучше в долгосрочной перспективе.
Моя последняя неудачная попытка (я все еще пытаюсь понять это)
$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);
Пытались что-то другое Только возни я дал это выстрел
$str = $this->post['message'];
$str = rtrim($str, '/');
$this->post['message'] = $str;
Так должность
<a href="http://vine.co/v/iF20jKHvnqg/" target="_blank">http://vine.co/v/iF20jKHvnqg/</a>
и rtrim
не имели никакого эффекта =/
, но если я изменю
$this->post['message'] = $str;
в
$this->post['message'] = test;
каждый пост превращается в TEST
так что я не понимаю, почему RTRIM не имеет effect =/
обновление для обеспечения чистоты
$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);
РАБОЧЕЕ ОБНОВЛЕНИЕ!
После Richards ответа я играл с плагин немного и придумал
$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, чтобы его отформатировать лучше, что вам еще нужно? –
Добавлен небольшой пример –