php - 用 html 标签拆分字符串失败

php - split string by html tags fails

我想统计字符串中的 html 个标签。我尝试这样做:

$array = preg_split("<li>",$string);
$count=count($array);
echo $count;

计数高于应有的值,因为此代码将 $string 变量与文本 "li" 而不是标签 li.

分开

如何使用 html 标签拆分字符串?

这是我试过的字符串。

Κυκλοφορητής Lowara Ecocirc XL, υψηλής απόδοσης για εγκαταστάσεις κεντρικής θέρμανσης με κινητήρες μονίμων μαγνητών, τεχνολογίας ECM, υγρού ρότορα.<br />
 <br /> Κατάλληλος για συστήματα ζεστού νερού χρήσης και θέρμανσης, συστήματα ψύξης και κλιματισμού, ηλιακά καθώς και για γεωθερμικά συστήματα. <ul> <li>
 Δυνατότητα ρύθμισης αναλογικής και σταθερής πίεσης, σταθερών στροφών και λειτουργία νυχτός.</li> <li>Σχεδιασμός υγρού ρότορα: Όλα τα περιστρεφόμενα μέρη λ
 ιπαίνονται από το αντλούμενο υγρό το οποίο ψύχει και τον κινητήρα.&nbsp;</li> <li>Χυτό θερμομονωτικό κέλυφος που κρατάει την θερμοκρασία του αντλούμενου υγρού
  (και του περιβάλλοντος) ακριβώς εκεί που πρέπει.</li> <li>Ρύθμιση και λειτουργία του νέου Ecocirc XL πολύ εύκολα μόνο με την χρήση τεσσάρων κουμπιών. Πρόσβαση
   στις προηγμένες ρυθμίσεις από PC, tablet ή smartphone μέσω ενσωματωμένου πρωτοκόλλου επικοινωνίας BUS ή Wi-Fi (προαιρετικό).</li> <li>Η ενσωματωμένη προστασία
    από εν ξηρώ λειτουργία σταματάει την αντλία και προστατεύει από βλάβες λόγω έλλειψης νερού.</li> <li>Τα ηλεκτρονικά μέρη είναι διαχωρισμένα από το υδραυλικό 
    μέρος της αντλίας για την αποφυγή προβλημάτων από συμπυκνώματα κατά την άντληση υγρών από συστήματα ψύξης.</li> <li>Δύο αναλογικές είσοδοι για σήματα 4-20mA 
    και 0-10V καθώς και επαφή για αισθητήριο &nbsp;θερμοκρασίας.</li> </ul> Συνοδεύεται από ρακόρ σύνδεσης.<br /> <br /> Ο κυκλοφορητής LOWARA Ecocirc XL καλύπτει
     πλήρως της οδηγία ErP η οποία θα ισχύει από το 2015.&nbsp;<br /> <br /> Έντυπα:<br /> <a href="http://www.lowara.com/lowdata/doc/EN/ecocircxl-td-en.pdf"
      style="line-height: 20.7999992370605px;">Πλήρες τεχνικό εγχειρίδιο των κυκλοφορητών Lowara Ecocirc</a><br /> <a href="http://www.lowara.com/lowdata/doc/ml
      /ecocircxl-im-ml.pdf" style="line-height: 20.7999992370605px;">Οδηγίες χρήσης</a><br /> &nbsp;

ok..发现问题:字符串是从数据库中检索到的,其中字符“<”被替换为“<”并且“>”被替换为“>”。当我使用这段代码时:

$array = preg_split("/&lt;li&gt;/",$description);

它工作正常。

我只是想知道为什么它以适当的形式回显带有字符“<,>”而不是“<,>”的字符串

您忘记了分隔符,所以这应该有效:

(此外,您输出的计数永远比标签的计数高 1,因为它计算数组的元素,因此您只需减去 1(例如 "<li>x1</li>x2" -> 2 ))

$array = preg_split("/<li>/",$string);
$count = count($array);
echo $count;

有关正则表达式定界符以及您可以使用的定界符的更多信息,请参阅:http://php.net/manual/en/regexp.reference.delimiters.php