<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)。
该函数会识别字符串中的等号编码,并转换为相应的字符。同时,遇到行尾的软换行(即行尾的等号),会将其移除,拼接下一行内容。
但有时候解码后的换行符并非你预期的格式,导致显示时格式混乱。
PHP 中不同环境下处理换行符不一致,容易出现格式问题。
</span><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>);
此时,如果 $decoded 中的换行符是 CRLF,某些浏览器或环境可能无法正确识别,显示成一行或错乱。
为避免换行符带来的问题,可以统一将所有换行符转换为统一格式。一般建议转换成 Unix 风格的换行符 \n。示例代码如下:
</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>// 将所有 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>));
通过上述方法,可以有效避免在使用 quoted_printable_decode() 时换行符导致的格式问题,让内容显示更加规范、清晰。