这是在记事本++中创建文本
lorem ipsum
dolor sit
lorem ipsum
dolor sit
我把文本存储在一个mysql表中
列类型-text
归类-utf8mb4_croatian_ci
我需要添加一些标签,像这样:
$blocks = explode("\n\n", $str); // $str is the text
$res = '';
foreach($blocks as $block){
$block = str_replace("\n", "<br>\n", $block);
$block = "<p>" . $block . "</p>";
$res .= $block . "\n\n";
}
echo $res;
我期待以下内容:
<p>lorem ipsum<br>
dolor sit</p>
<p>lorem ipsum<br>
dolor sit</p>
而不是上面我得到以下:
<p>lorem ipsum<br>
dolor sit<br>
<br>
lorem ipsum<br>
dolor sit</p>
所以我需要先把给定的字符串分解为double new lines
然后在每个块中用<br>
替换单个新行
最后用<p></p>
覆盖每个块
顺便说一句,早些时候我用同样的php代码在这个表上工作--它工作了
今天,突然-我得到了不想要的结果
我尝试将行尾从crlf
更改为lf
,反之亦然-均未成功
- 更新**
我现在看到的是
如果字符串是由php定义的-它工作
如果字符串是由文本区域或contenteditable div组成的-它可以工作
如果字符串是复制粘贴从记事本++到一个单元格表-它给出以上-不想要的结果
所以我认为-行尾有问题
1条答案
按热度按时间eqqqjvef1#
正如在评论中提到的,这可能是一个空格字符问题。如果你的文本不应该包含任何其他内容,除了空格和换行符,你可能应该首先删除所有其他内容(主要是
\r
和\t
)。一个简单的正则表达式就可以做到这一点: