Как заголовок, если я вложу какой-нибудь html в таблицу. Как я могу использовать mysql для извлечения открытого текста между тегами html?
Например:
CREATE TABLE `test` ( `id` INT PRIMARY KEY, `plain` LONGTEXT ) INSERT INTO `text` VALUES (1, '<p>text between tag 'p'</p><span>text between 'span'</span>');
И перед вставкой, я хочу использовать триггер, чтобы извлечь простой текст, который я хочу. Как?
Или использовать php? Я имею в виду передать html скрипту php, а скрипт php выполняет извлечение.
Но есть решение для моей проблемы, используя php, как насчет mysql?
Если ваш контент всегда начинается с тегов (и т. Д.),
попробуй это:
SELECT * from table WHERE colmn_name REGEXP '>[^<]*mytext';
Другой способ – использовать strip_tags
– Стриптиз HTML и PHP-теги из строки
<?php $text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; echo strip_tags($text); echo "\n"; // Allow <p> and <a> echo strip_tags($text, '<p><a>'); ?>
Вывод кода выше:
Test paragraph. Other text <p>Test paragraph.</p> <a href="#fragment">Other text</a>
Предупреждение :: Because strip_tags() does not actually validate the HTML, partial or broken tags can result in the removal of more text/data than expected.
Вы должны поместить код html в переменную, скажем, $html_input
$html_input= "'<p>text between tag 'p'</p><span>text between 'span'</span>'"; $stripped_html = strip_tags($html_input); // Now insert it into the table `text` INSERT INTO `text` VALUES (1, $striped_html);
Чисто MQSQL
:
CREATE FUNCTION `strip_tags`($str text) RETURNS text BEGIN DECLARE $start, $end INT DEFAULT 1; LOOP SET $start = LOCATE("<", $str, $start); IF (!$start) THEN RETURN $str; END IF; SET $end = LOCATE(">", $str, $start); IF (!$end) THEN SET $end = $start; END IF; SET $str = INSERT($str, $start, $end - $start + 1, ""); END LOOP; END; mysql> select strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.'); +----------------------------------------------------------------------+ | strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.') | +----------------------------------------------------------------------+ | hello world again. | +----------------------------------------------------------------------+ 1 row in set
Ссылка: Stackoverflow
Используйте strip_tags()
в строке, сохраните результат в переменной и затем используйте ее в своем запросе:
$str = "'<p>text between tag 'p'</p><span>text between 'span'</span>'"; $str = strip_tags($str); //'text between tag 'p'text between 'span'' $str = mysql_real_escape_string($str); //just for safety
В вашем запросе:
INSERT INTO `text` VALUES (1, $str);
Документация: strip_tags()
, mysql_real_escape_string()
Надеюсь это поможет!
Вы можете сделать это и в самой MySQL. Вам нужен эквивалент striptags php Funktion. Взгляните сюда
http://www.sitepoint.com/forums/showthread.php?656167-PHP-s-strip_tags()-equivalent-MYSQL-function
Обновление с некоторыми изменениями из одного из приведенных выше ответов.
DELIMITER *** CREATE FUNCTION ConvertHTMLToText(str LONGTEXT CHARSET utf8) RETURNS LONGTEXT CHARSET utf8 BEGIN DECLARE start, end INT DEFAULT 1; LOOP SET start = LOCATE("<", str, start); IF (!start) THEN RETURN str; END IF; SET end = LOCATE(">", str, start); IF (!end) THEN SET end = start; END IF; SET str = TRIM(INSERT(str, start, end - start + 1, "")); END LOOP; END ***