當前位置: 首頁> 最新文章列表> 在PHP 使用quoted_printable_decode 解碼時,如何正確處理換行符問題,避免格式錯亂?

在PHP 使用quoted_printable_decode 解碼時,如何正確處理換行符問題,避免格式錯亂?

gitbox 2025-07-17
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 這部分與文章內容無關,可以放置一些初始化代碼或者註釋</span></span><span>
</span><span><span class="hljs-comment">// 例如:</span></span><span>
</span><span><span class="hljs-comment">// 初始化環境變量,或者設置編碼格式等</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: text/html; charset=utf-8'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>在 PHP 使用 quoted_printable_decode 解碼時,如何正確處理換行符問題,避免格式錯亂?</h1>

<p>在處理電子郵件內容或者一些使用 <code>quoted-printable

表示回車換行(CRLF)。

二、 quoted_printable_decode () 函數的工作原理

該函數會識別字符串中的等號編碼,並轉換為相應的字符。同時,遇到行尾的軟換行(即行尾的等號),會將其移除,拼接下一行內容。

但有時候解碼後的換行符並非你預期的格式,導致顯示時格式混亂。

三、換行符格式的差異

  • CRLF(\r\n) :Windows 系統默認換行符。
  • LF(\n) :Unix/Linux 和macOS(新版)默認換行符。
  • CR(\r) :舊版macOS 默認換行符。

PHP 中不同環境下處理換行符不一致,容易出現格式問題。

四、常見問題示例

<span><span>$encoded</span></span> <span>=</span> <span><span>"Hello=0D=0AWorld=0D=0A!"</span></span> <span>;
</span><span><span>$decoded</span></span> <span>=</span> <span><span class="function_ invoke__">quoted_printable_decode</span></span> <span>(</span> <span><span>$encoded</span></span> <span>);
</span><span><span>echo</span></span><span> </span><span><span class="function_ invoke__">nl2br</span></span> <span>(</span> <span><span>$decoded</span></span> <span>);
</span><p>此時,如果<span class="fun">$decoded</span>中的換行符是CRLF,某些瀏覽器或環境可能無法正確識別,顯示成一行或錯亂。</p><h2>五、正確處理換行符的方法</h2><p>為避免換行符帶來的問題,可以統一將所有換行符轉換為統一格式。一般建議轉換成Unix 風格的換行符<span class="fun">\n</span> 。示例代碼如下:</p><pre>
<span><span>$decoded</span></span> <span>=</span> <span><span class="function_ invoke__">quoted_printable_decode</span></span> <span>(</span> <span><span>$encoded</span></span> <span>);

</span><span><span>// 將所有CRLF (\r\n) 和CR (\r) 換行符統一替換成LF (\n)</span></span><span>
</span><span><span>$normalized</span></span> <span>=</span> <span><span class="function_ invoke__">str_replace</span></span> <span>([</span> <span><span>"\r\n"</span></span> <span>,</span> <span><span>"\r"</span></span> <span>],</span> <span><span>"\n"</span></span> <span>,</span> <span><span>$decoded</span></span> <span>);

</span><span><span>// 如果需要HTML 顯示換行,可以用nl2br</span></span><span>
</span><span><span>echo</span></span><span> </span><span><span class="function_ invoke__">nl2br</span></span> <span>(</span> <span><span class="function_ invoke__">htmlspecialchars</span></span> <span>(</span> <span><span>$normalized</span></span> <span>));
</span><h2>六、總結</h2><ul><li>使用<span class="fun">quoted_printable_decode()</span>解碼後,換行符格式可能是CRLF 或CR。</li><li>為了避免格式錯亂,建議統一將換行符替換成LF(\n)。</li><li>在HTML 出口時間,結合<span class="fun"><a href="/zh-tw/php/nl2br.html" target="_blank">nl2br()</a></span>和<span class="fun"><a href="/zh-tw/php/htmlspecialchars.html" target="_blank">htmlspecialchars()</a></span>使用,可以確保格式和安全。</li></ul><p>通過上述方法,可以有效避免在使用<span class="fun">quoted_printable_decode()</span>時換行符導致的格式問題,讓內容顯示更加規範、清晰。</p></div></div>