현재 위치: > 최신 기사 목록> iconv_substr 문자열을 가로 채울 때 "문자 자르기"오류를 방지하는 방법은 무엇입니까?

iconv_substr 문자열을 가로 채울 때 "문자 자르기"오류를 방지하는 방법은 무엇입니까?

M66 2025-07-25

3. "문자 잘린"오류의 원인

  • : 기본 인코딩은 문자열의 실제 인코딩이 아닐 수 있으므로 바이트 수를 가로 채는 데 오류가 발생합니다.

  • 인터셉트 길이는 실제 문자 수를 초과합니다 . 인터셉트 위치가 문자열의 길이를 초과 할 때 오류 가보고 될 수 있습니다.

  • 문자열 자체는 일관성이 없거나 손상되었습니다 .


4. "문자 잘린"오류를 방지하는 방법은 무엇입니까?

  1. 인코딩을 식별하십시오

 <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>
  1. 차단 된 길이와 오프셋이 바이트가 아닌 문자를 기반으로하는지 확인하십시오.

iconv_substr 's $ offset$ 길이는 바이트가 아닌 문자 카운트이지만 문자열은 지정된 인코딩이어야합니다.

  1. 문자열 길이를 미리 감지하십시오

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> &gt; </span><span><span class="hljs-variable">$length</span></span><span>) {
    </span><span><span class="hljs-comment">// 오프셋 및 교차 경계를 처리합니다</span></span><span>
}
</span></span>
  1. 오류 처리

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>
  1. 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>

V. 샘플 코드

 <span><span><span class="hljs-meta">&lt;?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> &gt; </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">?&gt;</span></span><span>
</span></span>