【问题标题】:How to remove html tags except <br> from mysql data?如何从mysql数据中删除除<br>之外的html标签?
【发布时间】:2016-07-31 18:02:31
【问题描述】:

我在mysql表中有一个字段Product_description,它有html标签。我想通过删除除br 之外的html 标记来更新此字段。我知道我可以使用 strip_tag 做到这一点,但我不明白如何为表格数据完成此操作。

【问题讨论】:

  • 你可以使用php strip_tags($text, '&lt;br&gt;')
  • 是的,但表中有 15000 个产品描述,我想更新它们吗?

标签: php html mysql tags


【解决方案1】:

删除文本中除&lt;br&gt;以外的所有标签,您确实可以使用strip_tags

$var = strip_tags($html, '<br>');

查看示例here

来自文档

您可以使用可选的第二个参数来指定不应剥离的标签。



将它们从持久化数据中删除(并不意味着要运行多次),您可以创建一个繁重的运行脚本以使用一次并更新值。像这样:(你可能也想使用trim

$con = new mysqli('localhost', 'username', 'password', 'database_name');
$stmt = $con->query('SELECT * FROM table_name');
while($row = $stmt->fetch_assoc()){
    $stmt2 = $con->prepare('UPDATE table_name set Product_description = ? WHERE Product_id = ?');
    $tmp = strip_tags($row['Product_description'], '<br>');
    $stmt2->bind_param("si", $tmp, $row['Product_id']);
    $stmt2->execute();
}

该脚本只供您运行一次,因此(可以说)如果它很慢也没关系...

【讨论】:

  • OP 声明:我可以用 strip_tag 做到这一点,但我不明白如何!我认为他需要完整的代码!
  • @IsmailRBOUH 抱歉,我不明白。我展示了如何做到这一点,一个工作示例并引用了文档。有了给定的信息,那就是……
  • 是的,但表中有 15000 个产品描述,我想更新它们吗?
  • 现在我曾经在 mysql 中创建一个函数,但它删除了 table 中的所有 html 标签。
  • 我不认为我不明白的OP意味着函数参数:D
【解决方案2】:

使用以下代码创建函数:

DROP FUNCTION IF EXISTS fnStripTags;
DELIMITER |
CREATE FUNCTION fnStripTags( Dirty varchar(4000) )
RETURNS varchar(4000)
DETERMINISTIC 
BEGIN
  DECLARE iStart, iEnd, iLength int;
    WHILE Locate( '<', Dirty ) > 0 And Locate( '>', Dirty, Locate( '<', Dirty )) > 0 DO
      BEGIN
        SET iStart = Locate( '<', Dirty ), iEnd = Locate( '>', Dirty, Locate('<', Dirty ));
        SET iLength = ( iEnd - iStart) + 1;
        IF iLength > 0 THEN
          BEGIN
            SET Dirty = Insert( Dirty, iStart, iLength, '');
          END;
        END IF;
      END;
    END WHILE;
    RETURN Dirty;
END;
|
DELIMITER ;

并执行以下查询:

SELECT fnStripTags('this <html>is <b>a test</b>, nothing more</html>');

【讨论】:

  • 这并没有解决用户的br标签问题
【解决方案3】:

只需一个标签,您就可以进行此查询

UPDATE `TABLE` SET column1 = REPLACE(column1, '<br>', '');

或者像这个例子一样剥离所有html标签的函数

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;

找到这个函数from

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多