【PHP8.x】quoted_printable_decode関数の使い方

quoted_printable_decode関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

quoted_printable_decode関数は、Quoted-printable形式でエンコードされた文字列をデコードし、元の文字列に変換する関数です。Quoted-printableエンコーディングは、主にメールの本文などで、ASCII以外の文字を安全に転送するために使用されます。この関数は、エンコードされた文字列を受け取り、元の文字列を返します。例えば、日本語などのマルチバイト文字を含む文字列がQuoted-printableでエンコードされている場合、この関数を用いることで元の可読な文字列に戻すことができます。

この関数は、ネットワーク経由で受信したデータやファイルから読み込んだデータなど、Quoted-printable形式でエンコードされた文字列を扱う際に特に有用です。デコードされた文字列は、その後の処理(例えば、データベースへの保存、表示、他のシステムへの送信など)で利用できるようになります。

関数を使用する際には、Quoted-printableエンコードされた文字列を引数として渡します。関数はデコードされた文字列を返し、エラーが発生した場合はfalseを返します。文字コードの指定は内部的に行われるため、通常は明示的な指定は不要です。ただし、特別な文字コードを使用している場合は、事前に適切な処理が必要となる場合があります。この関数は、PHPアプリケーションにおけるテキストデータの処理において、重要な役割を果たします。

構文(syntax)

1quoted_printable_decode(string $string): string

引数(parameters)

string $string

  • string $string: 引用可能表示(quoted-printable)形式でエンコードされた文字列

戻り値(return)

string

quoted_printable_decode関数は、Quoted-Printableエンコーディングされた文字列をデコードして、通常の文字列として返します。

サンプルコード

PHPでquoted printableをdecodeする

1<?php
2
3/**
4 * Quoted-Printableエンコードされた文字列をデコードするサンプル
5 *
6 * このコードは、メール本文などで使われるQuoted-Printable形式でエンコードされた文字列を、
7 * 元の読みやすい文字列に変換する方法を示します。
8 * 例えば、非ASCII文字(日本語など)や制御文字が `=XX` の形式で表現されている場合、
9 * それらをデコードして通常のテキストに戻します。
10 */
11
12/**
13 * Quoted-Printableエンコードされた文字列をデコードし、結果を表示します。
14 *
15 * @param string $encodedString Quoted-Printableエンコードされた入力文字列。
16 * @return void
17 */
18function runQuotedPrintableDecodeExample(string $encodedString): void
19{
20    // quoted_printable_decode 関数を使用して、エンコードされた文字列をデコードします。
21    // この関数は、RFC 2045で定義されているQuoted-Printable形式を処理します。
22    $decodedString = quoted_printable_decode($encodedString);
23
24    echo "=== Quoted-Printable デコードの例 ===" . PHP_EOL;
25    echo "エンコード前 (入力): " . $encodedString . PHP_EOL;
26    echo "デコード後 (出力):  " . $decodedString . PHP_EOL;
27    echo "==================================" . PHP_EOL;
28}
29
30// 実行例1: 基本的な英数字と特殊文字のデコード
31// "=20" は半角スペース、"=3D" は "=" 記号、"=21" は "!" を表します。
32$sample1 = "Hello=20World=21=3DExample.";
33runQuotedPrintableDecodeExample($sample1);
34
35// 実行例2: 日本語(UTF-8エンコード)を含む文字列のデコード
36// "=E3=83=86=E3=82=B9=E3=83=88" は UTF-8 でエンコードされた「テスト」です。
37// "=0D=0A" は改行コード (CRLF) を表します。
38$sample2 = "Japanese text: =E3=83=86=E3=82=B9=E3=83=88=0D=0AThis is a new line.";
39runQuotedPrintableDecodeExample($sample2);
40
41?>

PHPのquoted_printable_decode関数は、Quoted-Printable形式でエンコードされた文字列をデコードし、元の読める形式に戻すための関数です。Quoted-Printableエンコーディングは、主に電子メールの本文などで、日本語のような非ASCII文字や半角スペース、イコール記号などの特殊文字を安全に扱うために使用されます。これらの文字は、=E3=83=86=20のように「=の後に16進数2桁」の形式で表現されます。

この関数は、string $stringという一つの引数を受け取ります。この$stringには、デコードしたいQuoted-Printable形式でエンコードされた文字列を渡します。関数はRFC 2045で定義されているQuoted-Printable形式を処理し、その結果をstring型のデコードされた文字列として返します。

サンプルコードでは、まず"Hello=20World=21=3DExample."という基本的な英数字と特殊文字のデコード例を示しています。これは半角スペースや記号が=20=3Dといった形式で表現されている文字列です。次に、日本語の「テスト」が=E3=83=86=E3=82=B9=E3=83=88のようにUTF-8エンコードされてQuoted-Printable形式になった文字列をデコードしています。これにより、エンコードされた特殊な記号の羅列が、本来の読みやすいテキストに変換されることを確認できます。電子メール受信時など、Quoted-Printable形式のデータを元の内容に戻したい場合に非常に役立つ関数です。

quoted_printable_decode関数は、主にメール本文などで使用されるQuoted-Printable形式でエンコードされた文字列をデコードする際に利用します。この関数は、入力文字列がRFC 2045に準拠した厳密なQuoted-Printable形式であることを前提としていますので、不正な形式の文字列を渡すと期待通りの結果が得られない可能性があります。特に注意すべきは文字コードの扱いです。この関数自体は文字コードの変換を行いません。入力文字列が例えばUTF-8でエンコードされていればデコード後もUTF-8のバイト列として得られます。そのため、デコード後の文字列を他のシステムで利用したり表示したりする際には、必要に応じてmb_convert_encodingなどの関数を用いて適切な文字コードに変換する作業が必要になる場合があります。

PHP: Quoted-Printable文字列をデコードする

1<?php
2
3/**
4 * quoted_printable_decode関数の使用例。
5 * Quoted-Printableエンコードされた文字列をデコードします。
6 * 主にメールの本文などで使われるエンコーディング形式です。
7 */
8
9// Quoted-Printableエンコードされた文字列の例
10// =E3=83=86=E3=82=B9=E3=83=88 は日本語の「テスト」をUTF-8でエンコードし、
11// さらにQuoted-Printableで表現したものです。
12$encodedString = "Hello =E3=83=86=E3=82=B9=E3=83=88 World.=0D=0A" .
13                 "This is a new line with some =C3=A4umlaut=C3=BC characters.";
14
15echo "元のエンコードされた文字列:\n";
16echo $encodedString . "\n\n";
17
18// quoted_printable_decode関数を使って文字列をデコード
19$decodedString = quoted_printable_decode($encodedString);
20
21echo "デコードされた文字列:\n";
22echo $decodedString . "\n";
23
24?>

PHPのquoted_printable_decode関数は、Quoted-Printableという形式でエンコードされた文字列を元の形式にデコード(復元)するために使用されます。このQuoted-Printableエンコーディングは、主に電子メールの本文で、日本語や絵文字などの非ASCII文字、あるいは特殊文字を安全に送受信するために利用されることが多いです。

この関数は、引数として$stringにデコードしたいQuoted-Printable形式の文字列を一つ受け取ります。そして、デコードされた通常の文字列を戻り値として返します。

サンプルコードでは、まず$encodedStringという変数に、Quoted-Printableエンコードされた文字列が格納されています。この文字列は、日本語の「テスト」や改行、ウムラウト付きの文字などがQuoted-Printable形式で表現されたものです。

次に、quoted_printable_decode関数にこの$encodedStringを渡すことで、$decodedString変数には人間が読める形式に変換された文字列が代入されます。例えば、「=E3=83=86=E3=82=B9=E3=83=88」は「テスト」に、「=0D=0A」は改行コードに、「=C3=A4umlaut=C3=BC」は「äumlautü」のようにデコードされます。

このように、この関数を使うことで、メールなどで受け取ったQuoted-Printable形式のデータを簡単に元の内容に戻すことができます。

quoted_printable_decode関数は、メールの本文などで使われるQuoted-Printableという特定のエンコーディング形式専用です。Base64など他の形式の文字列には使えず、入力がQuoted-Printable形式でない場合、期待しない結果や文字化けが発生しますのでご注意ください。日本語などのマルチバイト文字を含む場合、デコード後の文字列がどの文字コード(UTF-8など)に基づいているか意識することが重要です。必要に応じてmb_convert_encoding関数などで適切な文字コードへ変換する処理を加えると、文字化けを防ぎ安全にデータを扱えます。

関連コンテンツ

【PHP8.x】quoted_printable_decode関数の使い方 | いっしー@Webエンジニア