如何使所有 html 标签与 php 在同一行中关闭

How can I make all html tags close in the same line with php

例如,如果我有

<b>Line 1
Line 2</b>

我想让它变成

<b>Line 1</b>
<b>Line 2</b>

谢谢。

这解决了问题...虽然不知道更多细节,但不确定这是最佳解决方案。

<?php
$string = '<b>Bold Text
Bold Text</b>';

$lines = explode("\n", $string);

$output = implode('</b><b>', $lines);

echo $output;

如果您使用代码,有一种简单的方法可以解决这个问题,尽管通常不赞成使用正则表达式来解析/处理 HTML 或任何标记语言。

首先是模式:

/<b>(.*?)<\/b>/s

这将做的是捕获 <b> 和下一个 </b> 之间的所有内容(不贪婪的),包括标签。

完全匹配将是整个字符串(要替换),捕获的组将是要替换的文本(在代码中稍作修改)。

这样做的方法是获取所有匹配项,然后迭代每个匹配项(从最后到第一个),在 \n 上展开捕获的组,然后用 [=13= 包装每个字符串] 和 </b>,然后再次用 \n 将其内爆。

用这个结果字符串替换匹配项。这也将处理 <b></b> 已经在同一行的情况。

PHP 示例:

$string = <<<EOD
<b>Bold Text
Bold Text</b>
Normal Text
Normal Text
<b>Bold Text</b>
EOD;

preg_match_all("/<b>(.*?)<\/b>/s", $string, $matches, PREG_PATTERN_ORDER);
for ($match = count($matches[0]) - 1; $match >= 0; $match--) {
    $replace = implode("\n", array_map(function ($str) {
        return "<b>".$str."</br>";
    }, explode("\n", $matches[1][$match])));
    $string = str_replace($matches[0][$match], $replace, $string);
}

echo $string;

将输出:

<b>Bold Text</b>
<b>Bold Text</b>
Normal Text
Normal Text
<b>Bold Text</b>