У меня есть текстовое поле, в которое я могу вводить контент:
<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-адресу?
Вы хотите, чтобы пользователи использовали язык разметки или даже стиль, подобный BBCOde, или вы хотите только заменить такие данные во внешнем интерфейсе при сохранении «необработанной» формы?
@NicoHaase, пользователи не могут добавлять или редактировать, им управляет администратор
Ну, кто бы ни был пользователем этого текстового поля - как насчет остального моего вопроса?
Зачем вам использовать CKEditor для обертывания URL-адреса в тегах HTML? !! Боже.
@TheCarver, админ клиент, html не знает



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я бы не рекомендовал использовать такой редактор, как 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
используйте
CKEditorвместоtextarea. Он имеет функции для добавления изображений, ссылок и прочего.