You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPWord中<p>标签内<br/>无法生成换行的修复方案咨询

Fixing
Line Breaks Not Working Inside

Tags in PHPWord v0.14

What's Going On

You've hit a known quirk in PHPWord 0.14: when <br/> tags are inside <p> elements, they don't render as line breaks in the final docx—instead, they just add a space. Outside <p> tags, they work fine. Let's walk through your scenario and the fixes available.

Your Setup

Code:

$html .= '<p>line1<br/>lin2</p>'; 
$phpWord = new \PhpOffice\PhpWord\PhpWord(); 
$section = $phpWord->addSection(); 
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $html); 
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); 
$objWriter->save($fileName);

Sample HTML:

$html = '<p>line1<br/>line2</p><p>line3<br/>line4</p>'

Expected vs. Actual Output:

  • Expected:
    line1
    line2
    line3
    line4
    
  • Actual:
    line1 line2
    line3 line4
    

Fixes to Try

1. Preprocess HTML to Split Paragraphs

The simplest workaround without touching PHPWord code is to split your <p> tags at each <br/> using a regex. PHPWord treats separate <p> elements as line breaks, so this will get you the desired output:

// Split <p> content at <br/> into individual paragraphs
$html = preg_replace('/(<p[^>]*>)(.*?)<br\/>(.*?)(<\/p>)/is', '$1$2</p><p>$3$4', $html);

This turns <p>line1<br/>line2</p> into <p>line1</p><p>line2</p>, which renders correctly.

2. Patch PHPWord's Html Class

If you need to keep the original HTML structure, you can modify PHPWord's source code to handle <br/> inside paragraphs. Open PhpOffice/PhpWord/Shared/Html.php and find the handleBr method (or the section where <br> tags are processed). Update it to handle paragraph containers:

protected static function handleBr($node)
{
    $container = self::$container;
    if ($container instanceof \PhpOffice\PhpWord\Element\TextRun) {
        $container->addTextBreak();
    }
    // Add this to support <br/> inside <p> tags
    elseif ($container instanceof \PhpOffice\PhpWord\Element\Paragraph) {
        $container->addTextBreak();
    }
}

Just note that if you upgrade PHPWord later, you'll need to reapply this patch.

3. Upgrade PHPWord (Best Long-Term Fix)

This bug was resolved in newer PHPWord versions (starting around v1.0). If your project can accommodate it, upgrading to the latest stable PHPWord is the most sustainable solution. Also, keep in mind PHP 5.4 is no longer supported—upgrading PHP to 7.0+ (required for modern PHPWord versions) will improve security too.


内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:29:21