如何从mysql数据中删除除了<br/>之外的html标签?

时间:2016-07-31 18:02:32

标签: php html mysql tags

我在mysql表中有一个字段br,它有html标签。我想删除除strip_tag之外的html标记来更新此字段。我知道我可以使用mysql> CREATE TABLE tweets (tweet nvarchar(140), lat float(10,6) not null, lng float(10,6) not null) engine=myisam; 执行此操作,但我不了解如何为表格数据完成此操作。

3 个答案:

答案 0 :(得分:5)

从文本中删除所有标记 <br>,您确实可以使用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();
}

那个脚本只能让你运行一次,所以如果它很慢的话,它可以说是好的......

答案 1 :(得分:1)

只有一个标签,您可以执行此查询

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

或make函数用于剥离所有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

答案 2 :(得分:1)

使用以下代码创建函数:

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>');
相关问题