2016-07-31 93 views
1

我在mysql表中有一個字段Product_description,它有html標籤。我想用除去br以外的html標籤更新此字段。我知道我可以用strip_tag來做到這一點,但我不明白如何完成這個表格數據。如何從mysql數據中刪除除了<br>之外的html標記?

+1

您可以使用PHP'用strip_tags($文本, '
')' –

+0

是的,但表中有15000個產品說明,我想更新它們呢? – webbed

回答

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(); 
} 

該腳本會爲你只運行一次,所以它的(可以說)確定如果它的速度慢...

+0

該OP說:*我可以用strip_tag做到這一點,但我不明白*!我認爲他需要完整的代碼! –

+0

@IsmailRBOUH對不起,我不明白。我展示瞭如何做到這一點,這是一個工作示例並引用了文檔。隨着給定的信息,這就是... – FirstOne

+0

是啊,但有15000產品說明在表中,我想更新他們呢? – webbed

1

爲只是一個標籤,你可以做到這一點查詢

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

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>'); 
+0

這不會解決用戶發出的'br'標籤問題 –