PHP 프로그래밍에서, 당신은 종종 문자열 길이, 특히 다중 바이트 캐릭터 세트 (예 : 중국어, 일본어, 한국 등)에 대해 몇 가지 어려움을 겪습니다. strlen () 및 substr () 함수는 기본적으로 단일 바이트 문자를 위해 설계되었으므로 다중 바이트 문자에 문제가있을 수 있습니다. 다행히도 PHP는 ICONV_SUBSTR () 가이 문제를 잘 해결하는 강력한 ICONV 라이브러리를 제공합니다. 오늘날 우리는 문자열 길이를 정확하게 제어하기 위해 iconv_substr () 및 strlen ()을 사용하는 방법을 탐색 할 것입니다.
전통적인 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_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>
다음으로 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자를 가로 채 웁니다. 여기서 길이 는 바이트 숫자가 아닌 문자 번호로, substr () 에서 부정확 한 바이트 수의 문제를 피합니다.
때로는 표시된 단어 수를 제한하는 등 다양한 조건에 따라 문자열의 길이를 동적으로 제어해야합니다. 우리는 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> > </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 () 함수는 주어진 최대 길이에 따라 문자열을 가로 채고 끝에 타원을 추가합니다.
iconv_substr () 및 iconv_strlen ()을 사용하면 멀티 파이트 문자 세트에서 문자열 길이 제어 문제를 효과적으로 해결할 수 있습니다. 이러한 기능을 통해 우리는 바이트가 아닌 문자별로 문자열을 정확하게 작동시켜 Multibyte 문자에 대한 strlen () 및 substr () 의 부정확성을 피할 수 있습니다. 프로젝트가 다국어 언어, 특히 중국어, 일본어, 한국 및 기타 캐릭터 세트를 포함 할 때 다국어 언어를 처리 해야하는 경우이 두 기능은 매우 실용적인 도구입니다.