Форматировать контент и отображать медиа

У меня есть текстовое поле, в которое я могу вводить контент:

<textarea name = "content" placeholder = "Content"></textarea>

Тип столбца содержимого в БД - Text.

Поэтому я мог добавить туда текст, а затем вставить этот текст в БД:

$stmt = $conn->prepare('INSERT INTO content VALUES(?)');
$stmt->execute( [$content] );

Затем я показываю этот контент где-то на моем веб-сайте:

$stmt = $conn->prepare('SELECT content FROM posts');
$stmt->execute();
$results = $stmt->fetchAll();

foreach( $results as $result ){
    echo '<div>'. $result .'</div>';
}

Но это содержимое затем отображается в виде обычного текста, поэтому, если я ввел:

$content = "This content contains a URL http://example.com";

Получаю: This content contains a URL http://example.com, Значит, ссылка отображается не как ссылка, а как обычный текст.

Также, если я добавил изображение:

$content = "http://example.com/images/img.jpg";

Или видео:

$content = "http://example.com/images/video.mp4";

Или видео с Youtube.

И что же мне делать?

Должен ли я использовать PHP или Javascript, чтобы проверить, содержит ли контент URL / изображение / видео, а затем добавить соответствующие элементы html к этому URL-адресу?

используйте CKEditor вместо textarea. Он имеет функции для добавления изображений, ссылок и прочего.

urfusion 16.08.2018 14:45

Вы хотите, чтобы пользователи использовали язык разметки или даже стиль, подобный BBCOde, или вы хотите только заменить такие данные во внешнем интерфейсе при сохранении «необработанной» формы?

Nico Haase 16.08.2018 15:01

@NicoHaase, пользователи не могут добавлять или редактировать, им управляет администратор

user9853119 16.08.2018 15:14

Ну, кто бы ни был пользователем этого текстового поля - как насчет остального моего вопроса?

Nico Haase 16.08.2018 15:18

Зачем вам использовать CKEditor для обертывания URL-адреса в тегах HTML? !! Боже.

TheCarver 16.08.2018 16:37

@TheCarver, админ клиент, html не знает

user9853119 16.08.2018 19:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
6
58
1

Ответы 1

Я бы не рекомендовал использовать такой редактор, как CKEditor, просто для того, чтобы обернуть некоторые URL-адреса в разметку, как шокируют другие. Это очень ленивый и дорогой (не обязательно по цене, а по размеру файлов и количеству запросов) способ решения простой задачи.

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

ПРИМЕР

// your string

$content = "This is the content https://example.com/images/image1.jpg";

// find all URLs in $content and add matches to $matches array

$regex = "#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#";
preg_match_all($regex, $content, $matches);

// loop through $matches array

foreach ($matches as $match) {

    // check each item in array and use regex to determine type

    if (preg_match('/\.(jpg|jpeg|png|gif)(?:[\?\#].*)?$/i', $match)) {
        $markup = '<img src = "'.$match.'">';
    } else {
        $markup = '<a href = "'.$match.'">'.$match.'</a>';
    }

    // now replace the $match'ed URL in $content with the right $markup

    str_replace($match, $markup, $content);

}

ДОКУМЕНТЫ

preg_match_all: http://php.net/manual/en/function.preg-match-all.php

preg_match: http://php.net/manual/en/function.preg-match.php

str_replace: http://php.net/manual/en/function.str-replace.php

Другие вопросы по теме