【PHP8.x】chunk_split関数の使い方
chunk_split関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
chunk_split関数は、文字列を指定した長さに分割し、指定した文字列を挿入する関数です。具体的には、入力された文字列を、指定されたlengthの長さごとに分割し、分割された各文字列の末尾にseparatorを挿入します。この関数は、長い文字列を読みやすくしたり、特定のフォーマットに合わせる必要がある場合に役立ちます。
lengthパラメータは、分割する文字列の長さを指定します。デフォルト値は76です。separatorパラメータは、分割された文字列の間に挿入する文字列を指定します。デフォルト値は"\r\n"(キャリッジリターンと改行)です。
例えば、長い文字列をメールのヘッダに含める場合、RFC 2822の仕様に従って、78文字以下に分割し、改行コードを挿入する必要があります。chunk_split関数を使うことで、このような処理を簡単に行うことができます。
引数には、分割したい文字列、分割する長さ(オプション)、区切り文字(オプション)を指定します。戻り値は、分割され、指定された区切り文字が挿入された文字列です。元の文字列が変更されることはありません。もしlengthに不正な値(例えば負の数)が与えられた場合、関数の動作は未定義となります。通常はエラーが発生するか、予期しない結果になる可能性があります。
構文(syntax)
1chunk_split(string $string, int $length = 76, string $separator = "\r\n"): string
引数(parameters)
string $string, int $length = 76, string $separator = "\r\n"
- string $string: 分割したい元の文字列
- int $length = 76: 文字列を分割する際の1つのチャンク(塊)あたりの最大文字数。デフォルトは76文字です。
- string $separator = "\r\n": 各チャンクの末尾に追加される区切り文字。デフォルトは改行コード(CRLF)です。
戻り値(return)
string
指定された文字列を指定された長さで分割し、各チャンクの末尾に指定された文字列を追加した新しい文字列を返します。
サンプルコード
PHP chunk_splitとbase64_encodeでRFC2045準拠文字列を作成する
1<?php 2 3declare(strict_types=1); 4 5/** 6 * 画像ファイルの内容をBase64エンコードし、 7 * RFC 2045 (MIME) に準拠する形で76文字ごとに分割して出力します。 8 * 9 * `base64_encode` された長い文字列は、メールなどで安全に転送するために 10 * `chunk_split` で分割されることがよくあります。 11 */ 12function createMimeCompliantBase64String(): void 13{ 14 // ダミーの画像データを作成します (実際は file_get_contents('image.png') などで読み込みます) 15 // この文字列は "これはテスト用の画像データです。" を表します。 16 $imageData = hex2bin('e38193e3828ce381afe38386e382b9e38388e794a8e381aee794bbe5838fe38387e383bce382bfe381a7e38199e38082'); 17 18 // データをBase64エンコードします 19 $base64Encoded = base64_encode($imageData); 20 21 // エンコードされた文字列を76文字ごとに "\r\n" で分割します 22 // 第2引数: 分割する文字数 (デフォルトは76) 23 // 第3引数: 区切り文字 (デフォルトは "\r\n") 24 $chunkedString = chunk_split($base64Encoded); 25 26 // 結果を出力します 27 echo "--- Base64エンコード後の文字列(分割前)---\n"; 28 echo $base64Encoded . "\n\n"; 29 30 echo "--- chunk_splitで76文字ごとに分割後の文字列 ---\n"; 31 echo $chunkedString; 32} 33 34// 関数を実行 35createMimeCompliantBase64String();
PHPのchunk_split関数は、指定した文字列を一定の文字数ごとに区切り、その間に特定の文字列(区切り文字)を挿入するための関数です。戻り値として、区切り文字が挿入された新しい文字列を返します。
このサンプルコードでは、まずbase64_encode関数を使ってバイナリデータ(ここではダミーの画像データ)を、メールなどで安全に転送可能なテキスト形式の長い文字列に変換しています。しかし、エンコードされた文字列は改行を含まないため、そのままでは非常に長い一行の文字列になってしまいます。
そこでchunk_split関数を使用し、この長い文字列を整形します。第1引数に分割したい文字列($base64Encoded)を指定します。第2引数(分割する文字数)と第3引数(区切り文字)は省略されているため、デフォルト値が適用されます。具体的には、76文字ごとに"\r\n"という改行コードが挿入されます。この「76文字で改行」というルールは、MIME(マイム)というメールの仕様で定められた標準的な形式に準拠するためのものです。
この処理により、元の長い一行の文字列が、メールなどで正しく扱える複数行のテキストに変換されます。
chunk_split関数は、文字列の末尾にも必ず区切り文字を追加します。このため、分割後の文字列をさらに処理する際に、最後に余分な区切り文字が存在することを考慮する必要があります。また、この関数は日本語のようなマルチバイト文字を正しく認識できず、文字の途中で分割して文字化けを引き起こす可能性があるため、サンプルコードのようにBase64エンコードされた半角英数字の文字列に使うのが安全です。単純に文字列を特定の文字数で配列に分割したい場合は、str_split関数の方が適していることがありますので、用途に応じて使い分けてください。
PHP: chunk_splitで文字列を分割する
1<?php 2 3/** 4 * PHPのchunk_split関数の使用例。 5 * この関数は、長い文字列を特定の長さごとに分割し、 6 * 各チャンクの終わりに指定された区切り文字を挿入します。 7 * システムエンジニアを目指す初心者向けに、基本的な使い方を示します。 8 */ 9 10// 処理対象となる長い文字列を定義します。 11$originalString = "PHPのchunk_split関数は、特に固定長のデータブロックを処理する場合や、表示のために文字列を整形する場合に非常に役立ちます。例えば、Base64エンコードされた文字列をRFCで推奨されている76文字ごとに改行で区切る、といった用途で使われることがあります。"; 12 13echo "--- 元の文字列 ---\n"; 14echo $originalString . "\n\n"; 15 16// chunk_split関数を使用して文字列を分割します。 17// 引数: 18// 1. $originalString: 分割対象の文字列 19// 2. 15: 各チャンクの最大文字数 20// 3. " | ": 各チャンクの終わりに挿入する区切り文字 21$chunkedStringWithCustomSeparator = chunk_split($originalString, 15, " | "); 22 23echo "--- 15文字ごとに ' | ' で区切った文字列 ---\n"; 24echo $chunkedStringWithCustomSeparator . "\n\n"; 25 26// 引数の一部を省略した場合の例。 27// length (チャンクの最大文字数) のみを指定し、separator (区切り文字) はデフォルト値(\r\n、つまり改行)を使用します。 28$chunkedStringWithDefaultSeparator = chunk_split($originalString, 25); 29 30echo "--- 25文字ごとにデフォルトの改行で区切った文字列 ---\n"; 31echo $chunkedStringWithDefaultSeparator . "\n"; 32 33?>
PHPのchunk_split関数は、長い文字列を指定した文字数ごとの塊(チャンク)に分割し、それぞれの塊の間に特定の区切り文字を挿入するための関数です。
第一引数の$stringには、処理対象となる文字列を渡します。第二引数の$lengthには、分割する文字数を整数で指定します。この引数は省略可能で、その場合のデフォルト値は76です。第三引数の$separatorには、各チャンクの末尾に挿入する文字列を指定します。こちらも省略可能で、デフォルトでは改行コード(\r\n)が使用されます。処理が完了すると、分割されて区切り文字が挿入された新しい文字列が戻り値として返されます。
サンプルコードでは、2つの使用例を示しています。最初の例では、元の文字列を15文字ごとに分割し、区切り文字として「 | 」を挿入しています。2つ目の例では、第三引数を省略しているため、25文字ごとにデフォルトの区切り文字である改行コードが挿入されています。このように、chunk_split関数は、可読性のために文字列を整形したり、特定のフォーマットに合わせてデータを分割したりする際に役立ちます。
この関数は、文字列を指定した文字数ごとに分割し、区切り文字を挿入した「1つの文字列」として返します。配列に分割する関数ではない点に注意してください。処理後の文字列の末尾にも必ず区切り文字が追加されるため、不要な場合はrtrim関数などで取り除く必要があります。また、この関数はバイト単位で文字列を分割するため、日本語のようなマルチバイト文字を含む文字列に使用すると、文字の途中で区切られて文字化けを起こす可能性があります。マルチバイト文字を扱う際は、mb_str_splitとimplodeを組み合わせるなどの代替策が必要です。引数を省略すると、文字数は76、区切り文字は改行コード(\r\n)がデフォルト値として使用されます。