php 通过分解字符串并添加p标记产生的不需要的结果

cigdeys3  于 2023-01-29  发布在  PHP
关注(0)|答案(1)|浏览(145)

这是在记事本++中创建文本

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组成的-它可以工作
如果字符串是复制粘贴从记事本++到一个单元格表-它给出以上-不想要的结果
所以我认为-行尾有问题

eqqqjvef

eqqqjvef1#

正如在评论中提到的,这可能是一个空格字符问题。如果你的文本不应该包含任何其他内容,除了空格和换行符,你可能应该首先删除所有其他内容(主要是\r\t)。
一个简单的正则表达式就可以做到这一点:

$cleaned_string = preg_replace('/[\r\t]*/m', '', $string);

相关问题