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?
Antwort
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 ...
Das OP erklärte: * Ich kann dies mit strip_tag tun, aber ich verstehe nicht wie *! Ich denke er braucht den vollen Code !! –
@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
ja, aber es gibt 15000 Produktbeschreibung in der Tabelle, und ich möchte sie auch dann aktualisieren? – webbed
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
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>');
Dies betrifft nicht das Problem der Br-Tags des Benutzers –
Sie php 'strip_tags verwenden können ($ text, '
')' –
Ja, aber es gibt 15000 Produktbeschreibung in der Tabelle und ich möchte sie dann auch aktualisieren? – webbed