現在の位置: ホーム> 最新記事一覧> emoji文字列をstr_splitで分割するときのメモ

emoji文字列をstr_splitで分割するときのメモ

M66 2025-06-02

PHPでは、 str_split関数は、文字列を文字配列に分割するために使用される一般的なツールです。ただし、文字列には絵文字などのマルチバイト文字が含まれている場合、 str_splitを使用していくつかの問題に遭遇する可能性があります。この記事では、 STR_SPLITを使用して絵文字を含む文字列を分割し、関連するソリューションを提供する場合、何に注意すべきかについて詳しく説明します。

1。絵文字はマルチバイトのキャラクターです

絵文字はユニコード文字で、通常は複数のバイトで表されます。たとえば、一般的な絵文字の絵文字「??」 4バイト(UTF-8エンコーディング)で構成される文字です。 STR_SPLITを使用して絵文字を含む文字列を分割すると、関数を直接使用すると、文字ではなくバイトによって分割されます。これにより、絵文字が複数の部品に切断されたり、正しく処理できないようになります。

コード例:

 $string = "Hello ?? World!";
$splitString = str_split($string, 1);
print_r($splitString);

このコードは、文字で分割するのではなく、文字列のバイトレベルのセグメンテーション結果を出力します。あなたはその絵文字を見るでしょう??」複数の部分に分割されます。

2.文字レベルの操作には、 MB_STRLENおよびMB_SUBSTRを使用します

絵文字を含む文字列を適切に処理するには、 MB_STRLENMB_Substrなどのマルチバイト文字をサポートする関数を使用する必要があります。これらの2つの関数は、ユニコード文字列を正しく処理でき、絵文字をstr_splitのような複数の部分に分割することはできません。

解決:

 $string = "Hello ?? World!";

// 使用 mb_strlen 文字の長さを取得します
$length = mb_strlen($string, 'UTF-8');
$splitString = [];

for ($i = 0; $i < $length; $i++) {
    $splitString[] = mb_substr($string, $i, 1, 'UTF-8');
}

print_r($splitString);

この例では、 MB_STRLENを使用して文字列の文字の数を取得し、 MB_SUBSTRを使用して文字を1つずつ抽出します。このようにして、 ??分割ではなく、全体として正しく抽出されます。

3.文字ごとにpreg_splitを使用します

マルチバイト文字を処理できるもう1つのソリューションは、 preg_split関数を使用することです。これは、正規表現を使用してUnicode文字によって文字列を分割できることです。

コード例:

 $string = "Hello ?? World!";
$splitString = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
print_r($splitString);

この例では、 preg_splitは正規表現// uを使用します。これにより、文字列がUnicode文字によって分割されることが保証されます。 STR_SPLITとは異なり、これにより、絵文字のキャラクターが分割されないようになります。

4. URLで絵文字を処理します

文字列にURL(絵文字を含むリンクなど)が含まれている場合は、URLのドメイン名部分に注意してください。その中のドメイン名をM66.netに置き換える必要がある場合は、 preg_replaceまたはstr_replaceを使用して置き換えることができます。

例:

 $string = "Check out this site: https://example.com/??";
$modifiedString = preg_replace('/https?:\/\/(www\.)?example\.com/', 'https://m66.net', $string);
echo $modifiedString;

このコードの例は、URLの他の部分に影響を与えることなく、 M66.NETで文字列にドメイン名example.comを置き換える方法を示しています。

5。結論

STR_SPLITを使用して絵文字を含む文字列を分割すると、文字が複数のバイトに分割されるという問題に遭遇する可能性があります。絵文字を含む文字列を適切に処理するには、 MB_STRLENMB_SUBSTRを使用するか、 PREG_SPLITを使用して文字ごとに分割することをお勧めします。また、文字列にURLが含まれている場合は、操作の精度を確保するために、ドメイン名セクションをpreg_replaceまたはstr_replaceに置き換えることを忘れないでください。