2016-07-31 21 views
1

Ich habe ein Feld Product_description in MySQL-Tabelle, die HTML-Tags hat. Ich möchte dieses Feld mit dem Entfernen von HTML-Tags außer br aktualisieren. Ich weiß, dass ich dies mit strip_tag tun kann, aber ich verstehe nicht, wie dies für die Tabellendaten zu erreichen ist.Wie HTML-Tags außer <br> aus MySQL-Daten zu entfernen?

+1

Sie php 'strip_tags verwenden können ($ text, '
')' –

+0

Ja, aber es gibt 15000 Produktbeschreibung in der Tabelle und ich möchte sie dann auch aktualisieren? – webbed

Antwort

5

Um entfernen Alle Tags aber<br> aus einem Text, können Sie in der Tat strip_tags verwenden:

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

Sehen Sie ein Beispiel here.

Aus dem docs:

Sie können den optionalen zweiten Parameter verwenden, um Tags zu spezifizieren, die gestrippt nicht werden sollen.



Um sie von den persistenten Daten entfernen (nicht mehrfach ausgeführt werden sollten), können Sie ein schwerer Lauf Skript erstellen können einmal verwendet werden und die Werte aktualisieren. Wie folgt aus: (Vielleicht möchten Sie trim verwenden)

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

Das Skript wäre für Sie es nur einmal ausgeführt, so ist es (wohl) in Ordnung, wenn es langsam ist ...

+0

Das OP erklärte: * Ich kann dies mit strip_tag tun, aber ich verstehe nicht wie *! Ich denke er braucht den vollen Code !! –

+0

@IsmailRBOUH Entschuldigung, ich verstehe es nicht. Ich zeigte, wie es geht, ein funktionierendes Beispiel und zitierte die Dokumente. Mit den gegebenen Informationen, das ist, was es gibt ... – FirstOne

+0

ja, aber es gibt 15000 Produktbeschreibung in der Tabelle, und ich möchte sie auch dann aktualisieren? – webbed

1

für nur ein Tag können Sie diese Abfrage tun

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

oder Funktion für Streifen wie in diesem Beispiel alle hTML-Tags machen

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; 

diese Funktion gefunden from

1

Funktion unten Code erstellen:

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 ; 

Und unter Abfrage ausführen:

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

Dies betrifft nicht das Problem der Br-Tags des Benutzers –