php 创建 ics 文件 - 隐藏字符和换行符中断输出

php creating ics file - hidden characters and line breaks breaking output

我有一个 php 页面,它应该为日历动态创建一个 ics 文件,其中的内容是从数据库中提取的。在大多数情况下这很好,但是描述导致了问题。

当我在 Notepad++ 中检查文件时,我可以定期看到 xAO,我认为它低于 75 个八位字节的限制 - 这导致在 Outlook 中查看时这两个词 运行 在一起。

如何在 php 中控制它以便它输出到下一次而不是 运行 将两个词放在一起?我试过 str_replace 有很多变体来获得 \n 字符串或 \n 但无济于事。

其次,段落之间有CRLF。同样,我找不到一个替代品来处理这个问题,它会在那时停止输出(即切断 ics 文件中的任何进一步细节)在 Outlook 中被读取。

以下是我在研究中从许多不同来源获得的一些代码示例

//$description = wordwrap($description,39,"\n");
/*$description = str_replace(PHP_EOL,"--",$description);
$description = preg_replace('/\r\n|\r|\n/', "--", $description);
$description = str_replace("\r\n","---",$description);
$description = str_replace("\n","---",$description);*/
$description = htmlentities($description, null, 'utf-8');
$description = str_replace(" ", "\n", $description);
$description = trim($description);
//$description = htmlspecialchars_decode($description);

我设法得到了这两个问题的答案。对于发现此问题的任何其他人,以下内容对我有用:

$description = str_replace("\xA0", " ", $description);//nbsp - make space
$description = str_replace("\x0A", "", $description);//cr - remove

$desc_html = str_replace("\x0D","<br>",$description);//lf - html break

$description = str_replace("\x0D", "\n", $description);//lf - text: escaped new line
$description = strip_tags(htmlspecialchars_decode($description));//clear html for plain text version