: 기본 인코딩은 문자열의 실제 인코딩이 아닐 수 있으므로 바이트 수를 가로 채는 데 오류가 발생합니다.
인터셉트 길이는 실제 문자 수를 초과합니다 . 인터셉트 위치가 문자열의 길이를 초과 할 때 오류 가보고 될 수 있습니다.
문자열 자체는 일관성이 없거나 손상되었습니다 .
인코딩을 식별하십시오
<span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>
차단 된 길이와 오프셋이 바이트가 아닌 문자를 기반으로하는지 확인하십시오.
iconv_substr 's $ offset 및 $ 길이는 바이트가 아닌 문자 카운트이지만 문자열은 지정된 인코딩이어야합니다.
문자열 길이를 미리 감지하십시오
iconv_strlen을 사용하여 국경 간을 피하기 위해 문자열의 길이를 결정하십시오.
<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">$str</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$offset</span></span><span> > </span><span><span class="hljs-variable">$length</span></span><span>) {
</span><span><span class="hljs-comment">// 오프셋 및 교차 경계를 처리합니다</span></span><span>
}
</span></span>
오류 처리
iconv_substr에서 오류가 발생하면 False를 반환 할 수 있습니다. 좋은 판단 :
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-comment">// 처리 차단에 실패했습니다,프로그램 예외를 피하십시오</span></span><span>
}
</span></span>
MBString 함수를 대안으로 사용하십시오
MB_SUBSTR 은 또한 다중 바이트 안전 문자열 인터셉트 함수이며 종종 iconv_substr을 대체하는 데 사용됩니다.
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span></span>
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"이것은 테스트 문자열입니다,데모를 위해 iconv_substr 용법。"</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-string">'UTF-8'</span></span><span>;
</span><span><span class="hljs-variable">$offset</span></span><span> = </span><span><span class="hljs-number">3</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">5</span></span><span>;
</span><span><span class="hljs-variable">$totalLength</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_strlen</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$offset</span></span><span> > </span><span><span class="hljs-variable">$totalLength</span></span><span>) {
</span><span><span class="hljs-keyword">echo</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-variable">$substr</span></span><span> = </span><span><span class="hljs-title function_ invoke__">iconv_substr</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$offset</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$substr</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-keyword">echo</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">echo</span></span><span> </span><span><span class="hljs-string">"결과를 가로 채십시오:"</span></span><span> . </span><span><span class="hljs-variable">$substr</span></span><span>;
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>