phpword在linux系统下生成的文档打开错误

2 篇文章 0 订阅
1 篇文章 0 订阅

具体问题如图所示:

我在win10的环境中,用phpword生成的文件,用office word是能正常打开的,但是在linux服务器环境上生成的就打不开。一直报上面的错误,百度良久,未果。

于是我就是把linux环境下生成的文件发到手机,用qq直接打开,文件打开了,显示出了部分内容,并且有个残缺的“</p>”标签。然后我猜测应该html标签搞得鬼。

我要生成的word内容,里面确实是带html标签的,主要是p标签和&nbsp。随后便添加一段过滤代码,去除所有的html标签,然后生成的word,终于能用office word正常打开。

数据库存储的内容:

<p>&nbsp;德玛西亚的荣光。</p><p>&nbsp;&nbsp;诺克萨斯永不退缩。</p><p>&nbsp;&nbsp;我是最后一句。</p>

下面是转化思路:

1. 将p标签对转化为单标签br

2. 利用strip_tag函数,过滤除br标签以外的html标签

3. trip_tag函数不能过滤&nbsp,所以需要用str_replace在来一遍

4. 利用br标签作为分隔,将文本分隔成数组,然后逐个添加到word里

下面附部分代码:

$text = htmlspecialchars_decode($value['content']);
$text = str_replace('</p><p>', '<br>', $text);
$text = strip_tags($text, '<br>');
$text = str_replace('&nbsp;', '', $text);
$text = str_replace('</p>', '', $text);*/
$textArr = explode('<br>', $text);
foreach ($textArr as $k => $v) {
	if (trim($v) != '') {
		$section->addText(
				$v,
				['name' => '微软雅黑', 'size' => 12],
				['lineHeight' => 1.2, 'spaceBefore' => 200, 'spaceAfter' => 200]
		);
	}
}

最后总结: liunx环境下,使用phpword生成word文件时,生成的内容中不可以包含任何的html标签,要写纯文本!

如有帮助,欢迎点赞!如有疑问,欢迎留言!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值