PHP DOM Document输出:如何让 转为实际换行而非文本?
解决PHP DOM解析器输出时\r\n被当作文本显示的问题
嘿,我一眼就看出问题所在啦——你在输出时用了单引号包裹'/r/n',而且还打错了转义字符(应该是\r\n不是/r/n)!
问题原因
在PHP里,单引号字符串的转义规则很严格:只有\'和\\会被解析成对应的字符,其他像\r、\n这类转义序列都会原样输出。所以你写的'/r/n'直接被当成普通文本打印出来了,根本没变成换行符。
另外你之前尝试的formatOutput = true之所以没用,是因为这个设置只影响DOMDocument::saveHTML()生成的HTML格式,而你这里是用echo直接拼接输出字符串,DOM的格式化配置管不到这部分哦。
修正方案
只需要做两个小修改:
- 把单引号里的
/r/n改成正确的转义字符\r\n - 用双引号包裹这个换行符,让PHP解析转义序列
修正后的代码片段:
foreach($output->getElementsByTagName('a') as $link) { echo '<topic_title>'.$link->nodeValue.'</topic_title>'. '<br>'. "\r\n". '<topic_desc>'.$link->getAttribute('title').'</topic_desc>'. '<br><br>'; }
更简洁的写法(用双引号插值):
如果你想让代码更清爽,可以把整个输出字符串用双引号包裹,直接插入变量:
foreach($output->getElementsByTagName('a') as $link) { echo "<topic_title>{$link->nodeValue}</topic_title><br>\r\n<topic_desc>{$link->getAttribute('title')}</topic_desc><br><br>"; }
额外说明
如果是想在浏览器页面上看到可视化的换行,那\r\n本身是文本换行,浏览器会忽略掉,这时候你已经加了<br>标签,足够在页面上显示换行效果;如果是希望HTML源代码里有整齐的换行,那上面的修改就能达到你的期望输出啦。
内容的提问来源于stack exchange,提问作者Kamil Janicki
相关产品推荐
相关产品推荐

