인용 된 인쇄 가능은 메일 전송을위한 인코딩 방법으로, ASCII가 아닌 문자를 형식 = xx 로 인코딩하므로 (XX는 문자의 16 진수 값) SMTP와 같은 프로토콜에서 전송 될 때 내용이 손상되지 않도록합니다. PHP는 인용문을 복원하기 위해 quoted_printable_decode를 제공합니다.
많은 개발자들은 quoted_printable_decode 로 디코딩 한 후 인식 할 수없는 기호 또는 갈색 코드가 문자열에 나타납니다. 주된 이유는 다음과 같습니다.
캐릭터 인코딩 불일치
인용 된 인쇄 가능한 것은 바이트 컨텐츠를 디코딩 할 책임이 있습니다. 디코딩 된 문자열은 여전히 바이트 스트림이며 실제 인코딩 (예 : UTF-8, ISO-8859-1 등)에 따라 올바르게 변환해야합니다.
탈출 문자는 완전히 처리되지 않았습니다 <br> 일부 이메일 컨텐츠는 여러 인코딩 방법을 사용하거나 인용 된 인쇄 가능한 사양을 엄격하게 따르지 않는 인코딩이있을 수 있으며 디코딩 중에 예외가 발생할 수 있습니다.
다중 바이트 문자가 분할되고 인코딩됩니다 <br> 다중 바이트 문자 (예 : 중국어 및 일본어)의 경우 인용 인쇄 가능한 인쇄 가능한 경우 인코딩 할 때 바이트를 여러 부분으로 나눌 수 있으며 디코딩 후 올바르게 결합해야합니다.
일반적으로 메일 컨텐츠는 UTF-8, GBK 등과 같은 헤더 정보에서 문자 세트 (charSet)를 선언합니다. 디코딩 후 PHP의 MB_Convert_Encoding 함수를 사용하여 문자열을 올바른 인코딩 형식으로 변환하는 것이 좋습니다.
<?php
// 가정 $encoded 예 quoted-printable 인코딩 된 문자열
$decoded = quoted_printable_decode($encoded);
// 변환 UTF-8 코딩
$corrected = mb_convert_encoding($decoded, 'UTF-8', 'ISO-8859-1');
echo $corrected;
?>
이메일이 UTF-8 인코딩 인 경우 두 번째 매개 변수를 해당 인코딩으로 변경할 수 있습니다.
인용 된 인쇄 가능한 인코딩에서 소프트 라인 브레이크 ( = \ r \ n )는 접힌 선을 나타내지 만, 때로는 신형 또는 공백이 디코딩 후에도 남아있어 디스플레이에 영향을 미칩니다. 정기적 인 청소를 사용할 수 있습니다.
<?php
$decoded = quoted_printable_decode($encoded);
// 소프트 라인 브레이크를 제거하십시오
$cleaned = preg_replace('/=\r?\n/', '', $decoded);
echo $cleaned;
?>
디코딩 된 문자열이 트랜스 코딩하기 전에 완전한 다중 바이트 시퀀스인지 확인하십시오. MB_CHECK_ENCODING를 사용하여 바이트 불완전 성으로 인한 코드를 피하기 위해 인코딩 유효성을 확인할 수 있습니다.
<?php
$decoded = quoted_printable_decode($encoded);
if (!mb_check_encoding($decoded, 'UTF-8')) {
// 可以尝试不同코딩转换
$decoded = mb_convert_encoding($decoded, 'UTF-8', 'ISO-8859-1');
}
echo $decoded;
?>
전자 메일 콘텐츠를 처리 할 때는 먼저 이메일 헤드의 컨텐츠 유형 및 숯불 정보를 읽고 자동으로 식별하고 인코딩하며 인용 된 인쇄 가능한 디코딩과 함께 처리하는 것이 좋습니다.
<?php
// 의사 코드 예
$content_type = 'text/plain; charset=ISO-8859-1'; // 이메일 헤더에서 구문 분석
preg_match('/charset=([^;]+)/i', $content_type, $matches);
$charset = $matches[1] ?? 'UTF-8';
$decoded = quoted_printable_decode($encoded);
$corrected = mb_convert_encoding($decoded, 'UTF-8', $charset);
echo $corrected;
?>
때로는 문자열이 동일한 데이터에서 quoted_printable_decode 에 대한 반복 호출을 피하기 위해 여러 번 인코딩되었을 수 있으며, 이로 인해 데이터 손상이 발생할 수 있습니다.
인용 된 컨텐츠를 처리하기 위해 quoted_printable_decode를 사용하는 경우, 키는 인용 된 인쇄 가능한 복원 만으로만 인쇄 할 수 있으며, 후속 문자 인코딩 변환 및 청소는 문자열의 올바른 표시를 보장하는 키입니다. 다음 핵심 사항 만 마스터하십시오.
캐릭터 인코딩 이메일을 읽고 존중합니다
인코딩 변환을 위해 mb_convert_encoding을 사용하십시오
소프트 라인 브레이크와 중복 문자를 정리하십시오
멀티 바이트 인코딩의 무결성을 확인하십시오
이는 디코딩 후 특수 문자와 코드 문제를 효과적으로 피하고 이메일 컨텐츠의 처리 품질을 향상시킬 수 있습니다.
<?php
// 포괄적 인 예
$encoded = "Hello=20World=21=0D=0A=C3=A9"; // quoted-printable 예
$decoded = quoted_printable_decode($encoded);
// 가정邮件声明코딩为 ISO-8859-1
$corrected = mb_convert_encoding($decoded, 'UTF-8', 'ISO-8859-1');
echo $corrected; // 산출:Hello World! é
?>