[英]How to replace all XHTML/HTML line breaks (<br>) with new lines?
我正在寻找最好的br2nl
功能。 我想用换行符\\n
替换
和<br>
所有实例。 很像nl2br()函数,但相反。<br />
我知道 PHP 手册注释中有几种解决方案,但我正在寻找来自 SO 社区的关于可能解决方案的反馈。
我通常会说“不要使用正则表达式来处理 HTML ”,但是,在这一点上,我可能会使用正则表达式,考虑到<br>
标签通常看起来像:
<br>
<br/>
,在/
之前有任意数量的空格
我想这样的事情可以解决问题:
$html = 'this <br>is<br/>some<br />text <br />!';
$nl = preg_replace('#<br\s*/?>#i', "\n", $html);
echo $nl;
几个注意事项:
<br
开头\\s*
/
: /?
>
#i
),因为<BR>
在 HTML 中是有效的您应该使用PHP_EOL
常量来拥有独立于平台的换行符。
在我看来,尽可能使用非正则表达式函数会使代码更具可读性。
$newlineTags = array(
'<br>',
'<br/>',
'<br />',
);
$html = str_replace($newlineTags, PHP_EOL, $html);
我知道这个解决方案有一些缺陷,但仍然想分享我的见解。
如果文档格式良好(或至少格式良好),您可以使用DOM 扩展和 xpath 查找所有 br 元素并将其替换为 \\n 文本节点。
$in = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>...</title></head><body>abc<br />def<p>ghi<br />jkl</p></body></html>';
$doc = new DOMDOcument;
$doc->loadhtml($in);
$xpath = new DOMXPath($doc);
$toBeReplaced = array();
foreach($xpath->query('//br') as $node) {
$toBeReplaced[] = $node;
}
$linebreak = $doc->createTextNode("\n");
foreach($toBeReplaced as $node) {
$node->parentNode->replaceChild($linebreak->cloneNode(), $node);
}
echo $doc->savehtml();
印刷
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head><title>...</title></head>
<body>abc
def<p>ghi
jkl</p>
</body>
</html>
编辑:只有一次迭代的较短版本
$in = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>...</title></head><body>abc<br />def<p>ghi<br />jkl</p></body></html>';
$doc = new DOMDOcument;
$doc->loadhtml($in);
$xpath = new DOMXPath($doc);
$linebreak = $doc->createTextNode("\n");
foreach($xpath->query('//br') as $node) {
$node->parentNode->removeChild($node);
}
echo $doc->savehtml();
从nl2br评论:
<?php
function br2nl($string){
$return=eregi_replace('<br[[:space:]]*/?'.
'[[:space:]]*>',chr(13).chr(10),$string);
return $return;
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.