Укорачивание ссылок средствами PHP

Некоторое время назад на моём сайте возникла необходимость «обрезать» часть ссылок. Из-за их излишней длины искажались таблици сайта.

Итак имеем:

  1. Строку с именем сслыки
  2. Строку с адресом ссылки

Как вы уже наверное догадались я выводил ссылки в цикле при помощи функции printf().
При этом мне нужно укоротить только название! Это делается примерно таким образом (хотя всегда могут быть вариации кода) :

$linkName = «Имя ссылки»;   ///Чтобы не усложнять код я задам ссылку двумя переменными.
$linkTarget = «https://how2.org.ua/»;
$maxLength = 20;   ////максимальная длина ссылки. Если она больше, значит необходимо укоротить название
if (strlen($strName) > $maxLength) {
    $strName = substr($strName,0,$maxLength).»…»;
}
/* В переменную $strName теперь попал укороченный вариант названия с тремя символами точки в конце */
/* Можем вывести её обычным образом */

printf(«<a href=%s>%s</a>», $strTarget, $strName);

Вот и всё! В итоге мы получим ссылку укороченную до заданной в переменной $maxLength длины.
Если вы не используете имена для своих ссылок, вам необходимо продублировать переменную со ссылкой. Теперь одна из них должна остаться неизменной, а вторую следует преобразовать по методу описанному выше.

Иногда может возникнуть ситуация, когда нам необходимо показать начало и конец ссылки, выбросив её середину (чаще всего это необходимо как раз в случае не имения «имени» ссылки).
Это можно сделать таким образом:

<?php
$link = «https://how2.org.ua/view/article.php»;   /// к примеру имеем такую ссылку
$new = split(‘/’, $link);   ///разделим все её элементы и запишем их в массив
print_r($new);   ///для наглядности выведем массив на экран

$last = count($new);  /// узнаем длину массива

/* Так как мы разделяли ссылку при помощи символа ‘ / ‘  два первых элемента массива не имеют смысла! Первый содержит ‘https:’ , а второй пуст.*/

$name = «https://».$new[2].»/…/».$new[$last-1];

/* Из-за того, что массив начинается с нулевого элемента необходимо добавить не $last элемент, а на 1 меньший */

printf(«<a href=%s>%s</a>»,$link,$name);  ///выведем полученную ссылку
?>

У меня получилось вот так:

Array
(
[0] => https:
[1] =>
[2] => how2.org.ua
[3] => view
[4] => article.php
)
https://how2.org.ua/…/article.php

Стоит отметить, что приведенная ссылка не работает. Она ссылается на несуществующую страницу и приведена сугубо для примера.


Ещё одном методом является разбиение строки-названия и вывод начала. Этот метод очень похож на первый, но используя его, мы обезопасимся себя от «случайного» изменения строки (никогда не будет недописанных слов и символов-артефактов).

Итак, разобьём строку при помощи функции split если превышена заданная длина строки:

if (strlen($last[‘title’]) > 60) {
    $text = split(» «, $last[‘title’]);    ///в качестве разделителя используем символ пробела
    $title = $text[0].» «.$text[1].» «.$text[2].»…»;  ///выводим 3 первых слова и троеточие
}

Такой метод естественно следует использовать для ссылок с именами.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий