我在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;
执行此操作,但我不了解如何为表格数据完成此操作。
答案 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>');