0

preg_replace を使用して HTML タグ内の改行のみを削除するにはどうすればよいですか?

例:

<table>

<tr>

<td></td>
</tr>
</table>

Text here. Text here

Text here.

したがって、関数が上記のコードを処理した後、戻り値は次のようになります。

<table>    <tr>    <td></td>    </tr>    </table>

Text here. Text here

Text here.
4

2 に答える 2

2

preg_replace を使用して HTML タグ内の改行のみを削除するにはどうすればよいですか?

技術的にはそうですが、実際には、HTML は改行をあまり気にしません。複数の空白文字は実際には 1 つの空白文字として読み取られます。あなたの例が示すように、\n をスペースまたは \t に置き換えるので、実際には同じで、次のことができるようになります。

$html = preg_replace('~(>[^>]*)(*BSR_ANYCRLF)\R([^<]*<)~', '$1 $3', $html);

同様に参照してください:php regex to match outside of html tagsおよびHow to replace different newline styles in PHP the smartest way? .

より安全な方法は、HTML パーサーのようなものを使用してDOMDocument、フラグメントを本文としてロードすることです。次に、body の子ノードの子ノードである textnode 内のすべての改行を置き換えます。

于 2012-04-05T22:31:56.060 に答える
0

これを行うためのよりスマートな方法があるかもしれませんが、これで十分です。

$str = "test\n\n test2 <table>\n\n\n test 3</table>\n\n\n test4 test5";

while ($str2 = preg_replace('/(>[^<]*)\n([^<]*<)/', '\\1\\2', $str)) {
    if ($str2 == $str) break;
    $str = $str2;
}

echo ($str);

> 文字と < 文字の間にある改行を探し、それらを削除します。

于 2012-04-05T22:35:08.123 に答える