Идея такая, в ckeditor отправляется различный текст. Если есть "голые" ссылки вида:
https://domen.ru/43654766587878787?dlinnaya+ssylka
то меняем их на слово "ссылка" и саму ссылку вида:
<a href="https://link.ru/43654766587878787?dlinnaya+ssylka" class="link" target="_blank">ссылка</a>
с этой задачей я справился, НО у меня в ckeditor так же используется подсветка синтаксиса (вставка кода) вообщем моя замена меняет ссылки и в куске кода. Этот код начинается с
<pre><code class="...
и заканчивается соответственно:
<code><pre>
Нужно дописать регулярное выражение, чтобы была проверка на отсутствие вначале и в конце этих вставок. То есть внутри code ничего не меняем, остальное проверяем. Как я не пытался, у меня не вышло. Вот моя замена ссылок:
$message = preg_replace('@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*(\\?\\S+)?)?)*)@', '<a href="http://$1" class="link" target="_blank">ссылка</a>', $message);
Это сообщение приходит на вебсокет, обрабатывается, сохраняется в БД и отправляется красивый текст обратно в окно клиенту.
Нужно дописать регулярное выражение, чтобы была проверка на отсутствие вначале и в конце этих вставок. То есть внутри code ничего не меняем, остальное проверяем
Можно конечно ещё подумать над составлением шаблона, но можно пойти и не много другим путём:
$str = '
<a href="#">Линк</a> Текст 1
https://domen.ru/43654766587878787?dlinnaya+ssylka Текст 2
<pre><code>
https://domen.ru/43654766587878787?dlinnaya+ssylka
<a href="#">Линк</a>
</code></pre>
';
Сначала найти и сохранить в переменную весь блок <pre><code>...</code></pre>
preg_match('~<pre><code[^>]*>.+?</code></pre>~s', $str, $code);
Потом произвести замену всех ссылок (в том числе и ссылок внутри тега <a>
)
$str = preg_replace('~https?://\S+|<a[^>]*>.+?</a>~', 'Ссылка', $str);
И напоследок заменить блок <pre><code>...</code></pre>
на ранее сохранённый его аналог
$str = preg_replace('~<pre><code[^>]*>.+?</code></pre>~s', $code[0], $str);
echo $str;
Результат:
Ссылка Текст 1
Ссылка Текст 2
<pre><code>
https://domen.ru/43654766587878787?dlinnaya+ssylka
<a href="#">Линк</a>
</code></pre>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Отправляю на серв данные c помощью axios в JSONФорма генериться с помощью VueJS
Как правильно сделать подстановку id (берется из массива php $IdLotItem) в javascript при обращении к форме? Пример:
Я создал свой первый пакет для packagistСделал репозиторий на гитхабе с composer