【问题标题】:How can I make all html tags close in the same line with php [closed]如何使所有html标签与php在同一行中关闭[关闭]
【发布时间】:2019-05-16 15:49:39
【问题描述】:

例如,如果我有

<b>Line 1
Line 2</b>

我想让它变成

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

谢谢。

【问题讨论】:

  • 这两者有什么区别?当你在浏览器上运行这些?
  • 我需要将 HTML 代码转换为其他一些代码,我首先需要它是这种格式。

标签: php regex dom preg-replace htmlpurifier


【解决方案1】:

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

首先是模式:

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

这样做会捕获&lt;b&gt; 和下一个&lt;/b&gt; 之间的所有内容(不贪婪),包括标签。

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

这样做的方法是获取所有匹配项,然后迭代每个匹配项(从最后一个到第一个),在\n 上爆炸捕获的组,然后用&lt;b&gt;&lt;/b&gt; 包装每个字符串之前再次使用\n 将其内爆。

用这个结果字符串替换匹配项。这也将处理您已经在同一行上有 &lt;b&gt;&lt;/b&gt; 的情况。

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>

【讨论】:

  • 我似乎无法让它工作,知道为什么吗?谢谢rextester.com/live/YRBQ80020
  • @user2335065 是的,您需要允许正则表达式将\n. 匹配-您可以通过提供/s 开关来做到这一点。我会更新我的答案以反映这一点。
【解决方案2】:

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

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

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

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

echo $output;

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 2023-04-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多