我从Tumblr API获得了不可靠的结果。当我得到一行文字时,我只收到文字。当有多行时,每行都包含在<p>
标记中。所以我得到:
This is a value with no second line
或
<p>This is a value</p>
<p>with a second line</p>
我希望两者看起来都一样。我一直在手动添加值<p>
,但这会导致:
<p><p>This is a value</p>
<p>with a second line</p></p>
关于多行值。
我对如何解决这个问题有一些想法,但我不确定哪个是最好的。
p p {}
,以抵消搞乱的样式<p>
标记的DOM内容并使其成为非冗余<p>
个标签,如果没有,则添加它们,然后将结果写入DOM。我不确定选项1是否能很好地工作(尤其是跨浏览器),而且看起来有点hacky。关于选项2或3是否更好以及我将如何实施的任何想法?
编辑:应该提到我正在使用Tumblr主题,因此我无法使用Python / PHP / ASP /等(这会让我更容易!)。
答案 0 :(得分:4)
为什么不
if ( str.indexOf('<p>') === -1 ) {
str = '<p>' + str + '</p>';
}
因此,如果字符串中没有出现"<p>"
字符串,则表示结果为“单行”,您需要将其包装在"<p>"
标记中。
答案 1 :(得分:2)
首先匹配:
result = /^\s*\<p\>.+\<\/p\>$/.test(result) ? result : '<p>' + result + '</p>';
而不是一直只添加标签。
答案 2 :(得分:1)
在您的选择中,我认为选项3是最佳选择。但是,我有另一个可能有用的想法:
我不确定你正在开发什么平台(php / asp.net / etc ..),你也可以在前端做到这一点。
split
函数将字符串拆分为基于搜索换行符的数组<p>
<p> </p>
中提琴!无论是1行还是10行,没有<p>
或10 <p>
,您都可以依赖这些功能。
这种方法可以“适应未来”这个应用程序的一部分,因为,正如我们所看到的那样,偶尔公司会快速并且没有警告改变api的返回结果,或者改变api的工作方式
答案 3 :(得分:0)
假设PHP;如果字符串格式一致〜
$str = 'hello world';
//$str = '<p>a string with a p tag</p>';
if(substr($str,0,3)=='<p>') {
echo $str;
} else {
echo '<p> ' . $str . '</p>';
}
// <p>hello world</p>
// <p>a string with a p tag</p>
答案 4 :(得分:0)
另一种解决方案可能是将所有/<\/p>[^<]*<p>/g
替换为<br/>
,以保留多行段落中的换行符。