現在の位置: ホーム> 最新記事一覧> ICONV_SUBSTRとStrlenを組み合わせて文字列の長さを制御する方法は?実践的なスキルを共有します

ICONV_SUBSTRとStrlenを組み合わせて文字列の長さを制御する方法は?実践的なスキルを共有します

gitbox 2025-09-08

PHPプログラミングでは、特にマルチバイトのキャラクターセット(中国、日本、韓国など)について、文字列の長さを扱う際にいくつかの課題に遭遇することがよくあります。 strlen()およびsubstr()関数はデフォルトでシングルバイト文字向けに設計されているため、マルチバイト文字に問題がある場合があります。幸いなことに、PHPはICONVの強力なライブラリを提供し、 ICONV_SUBSTR()はこの問題をうまく解決します。今日は、 iconv_substr()strlen()を使用して、文字列の長さを正確に制御する方法を検討します。

なぜiconv_substrを使用するのですか?

従来のsubstr()およびstrlen()関数では、マルチバイト文字(中国語など)を扱っている場合、 strlen()は文字の数ではなく文字のバイト数を計算します。これにより、計算された文字列の長さが予想通りにならない場合があります。例えば:

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"こんにちは,世界!"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>); </span><span><span class="hljs-comment">// 出力 18</span></span><span>
</span></span>

この時点で、 strlen()は文字の代わりにバイト数を返します。漢字はそれぞれ3バイトを占有するため、この文字列には6文字がありますが、 strlen()は誤って18バイトを返します。

ICONV_SUBSTR()は、マルチバイト文字を処理するために特別に使用されます。バイトではなく文字数を正しく計算できるため、文字列の長さを正確に制御できます。

iconv_substrとstrlenを組み合わせて使用​​する方法は?

1.文字列内の文字数を計算します

まず、 iconv_strlen()を使用して、バイト数ではなく、文字列の文字の数を計算する必要があります。 iconv_strlen()文字セットがシングルバイトかマルチバイトかに関係なく、文字列内の実際の文字数を返します。

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"こんにちは,世界!"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>); </span><span><span class="hljs-comment">// 出力 6</span></span><span>
</span></span>

2。ICONV_SUBSTRを使用して傍受します

次に、 iconv_substr()を使用して文字列を傍受できます。そのパラメーターはsubstr()に似ていますが、マルチバイト文字セットの正しい傍受をサポートしています。 iconv_strlen()iconv_substr()を組み合わせることにより、傍受された文字列の文字長を正確に制御できます。

 <span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"こんにちは,世界!"</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">3</span></span><span>;
</span><span><span class="hljs-variable">$substring</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$substring</span></span><span>; </span><span><span class="hljs-comment">// 出力 "こんにちは,"</span></span><span>
</span></span>

この例では、 ICONV_SUBSTR()が文字列の最初の文字からインターセプトし、3文字をインターセプトします。ここで、長さはバイト数ではなく文字番号であり、これはsubst()の不正確なバイト数の問題を回避します。

3。文字列の長さを動的に制御します

表示される単語の数を制限するなど、さまざまな条件に応じて、文字列の長さを動的に制御する必要がある場合があります。 ICONV_SUBSTR()ICONV_STRLEN()の組み合わせにより、これを簡単に達成できます。

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">truncate_string</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$string</span></span></span><span>, </span><span><span class="hljs-variable">$max_length</span></span><span>) {
    </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$length</span></span><span> &gt; </span><span><span class="hljs-variable">$max_length</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$max_length</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>) . </span><span><span class="hljs-string">'...'</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>;
    }
}

</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"こんにちは,世界!これはテスト文字列です。"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">truncate_string</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">10</span></span><span>); </span><span><span class="hljs-comment">// 出力 "こんにちは,世界!..."</span></span><span>
</span></span>

この例では、 truncate_string()関数は、指定された最大長に基づいて文字列をインターセプトし、最後にerlypsisを追加します。

要約します

iconv_substr()およびiconv_strlen()を使用することにより、マルチバイト文字セットで文字列長コントロールの問題を効果的に解決できます。これらの関数により、マルチバイト文字でのstrlen()subst()の不正確さを回避して、バイトではなく文字によって文字列を正確に操作できます。プロジェクトが多言語を扱う必要がある場合、特に中国語、日本、韓国語、その他のキャラクターセットを含める場合、これらの2つの機能は非常に実用的なツールです。