Библиотека Laravel Auto-Link

Я ищу обнаружение автоматической ссылки путешествия.

Я пытаюсь создать сайт для социальных сетей, и когда мои пользователи публикуют URL-адреса, мне это нужно, чтобы они показывались вместо обычного текста.

0

Решение

Пытаться Автологин для Laravel от dwightwatson, который предоставляет вам возможность генерировать URL-адреса, которые обеспечат автоматический вход в ваше приложение, а затем перенаправить в соответствующее местоположение

0

Другие решения

Насколько я знаю, в ядре Laravel нет эквивалента для помощника функций auto_link () из Code Igniter (при условии, что вы переходите на версию CI).

В любом случае, очень просто получить этот код и использовать его в Laravel для быстрого грязного обходного пути. Я просто случайно искал ту же проблему.

Поместите в свой каталог App класс контейнера для ваших помощников (или любой контейнер, в данном случае, он просто должен быть обнаружен фреймворком), в этом случае я поместил файл UrlHelpers.php. Затем, внутри него, поместите две статические функции, захваченные для версии CI:

class UrlHelpers
{
static function auto_link($str, $type = 'both', $popup = FALSE)
{
// Find and replace any URLs.
if ($type !== 'email' && preg_match_all('#(\w*://|www\.)[^\s()<>;]+\w#i', $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
// Set our target HTML if using popup links.
$target = ($popup) ? ' target="_blank"' : '';

// We process the links in reverse order (last -> first) so that
// the returned string offsets from preg_match_all() are not
// moved as we add more HTML.
foreach (array_reverse($matches) as $match) {
// $match[0] is the matched string/link
// $match[1] is either a protocol prefix or 'www.'
//
// With PREG_OFFSET_CAPTURE, both of the above is an array,
// where the actual value is held in [0] and its offset at the [1] index.
$a = '<a href="' . (strpos($match[1][0], '/') ? '' : 'http://') . $match[0][0] . '"' . $target . '>' . $match[0][0] . '</a>';
$str = substr_replace($str, $a, $match[0][1], strlen($match[0][0]));
}
}

// Find and replace any emails.
if ($type !== 'url' && preg_match_all('#([\w\.\-\+]+@[a-z0-9\-]+\.[a-z0-9\-\.]+[^[:punct:]\s])#i', $str, $matches, PREG_OFFSET_CAPTURE)) {
foreach (array_reverse($matches[0]) as $match) {
if (filter_var($match[0], FILTER_VALIDATE_EMAIL) !== FALSE) {
$str = substr_replace($str, static::safe_mailto($match[0]), $match[1], strlen($match[0]));
}
}
}

return $str;
}

static function safe_mailto($email, $title = '', $attributes = '')
{
$title = (string)$title;

if ($title === '') {
$title = $email;
}

$x = str_split('<a href="mailto:', 1);

for ($i = 0, $l = strlen($email); $i < $l; $i++) {
$x[] = '|' . ord($email[$i]);
}

$x[] = '"';

if ($attributes !== '') {
if (is_array($attributes)) {
foreach ($attributes as $key => $val) {
$x[] = ' ' . $key . '="';
for ($i = 0, $l = strlen($val); $i < $l; $i++) {
$x[] = '|' . ord($val[$i]);
}
$x[] = '"';
}
} else {
for ($i = 0, $l = strlen($attributes); $i < $l; $i++) {
$x[] = $attributes[$i];
}
}
}

$x[] = '>';

$temp = array();
for ($i = 0, $l = strlen($title); $i < $l; $i++) {
$ordinal = ord($title[$i]);

if ($ordinal < 128) {
$x[] = '|' . $ordinal;
} else {
if (count($temp) === 0) {
$count = ($ordinal < 224) ? 2 : 3;
}

$temp[] = $ordinal;
if (count($temp) === $count) {
$number = ($count === 3)
? (($temp[0] % 16) * 4096) + (($temp[1] % 64) * 64) + ($temp[2] % 64)
: (($temp[0] % 32) * 64) + ($temp[1] % 64);
$x[] = '|' . $number;
$count = 1;
$temp = array();
}
}
}

$x[] = '<';
$x[] = '/';
$x[] = 'a';
$x[] = '>';

$x = array_reverse($x);

$output = "<script type=\"text/javascript\">\n". "\t//<![CDATA[\n". "\tvar l=new Array();\n";

for ($i = 0, $c = count($x); $i < $c; $i++) {
$output .= "\tl[" . $i . "] = '" . $x[$i] . "';\n";
}

$output .= "\n\tfor (var i = l.length-1; i >= 0; i=i-1) {\n". "\t\tif (l[i].substring(0, 1) === '|') document.write(\"&#\"+unescape(l[i].substring(1))+\";\");\n". "\t\telse document.write(unescape(l[i]));\n". "\t}\n". "\t//]]>\n". '</script>';

return $output;
}

}

Функция safe_mailto используется, если в вашей строке есть ссылки на электронную почту. Если вам это не нужно, вы можете изменить код.

Затем вы можете использовать вспомогательный класс, как этот, в любой части вашего кода Laravel, как обычно (здесь, внутри шаблона лезвия, но принцип тот же):

<p>{!! \App\Helpers\Helpers::auto_link($string) !!}</p>

Быстро и грязно, и это работает. Надеюсь, что помог. Удачи!

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector