오늘 발생한 문제를 간략하게 설명하세요.
내 코드에는 다음 코드 세그먼트가 있습니다.
<code><span><span><?php</span> header(<span>"Content-type:text/html;charset=utf8"</span>); <span>echo</span> rtrim(<span>"威、"</span>,<span>"、"</span>);</span></code>
원래 기대했던 바는 "power"를 출력하는 것이었습니다. 그러나 그것은 역효과를 냈고 여러 개의 잘못된 코드가 출력되었습니다. 왜 이런가요? 자세히 설명하겠습니다.
우선, rtrim 함수의 기능을 알아야 합니다. 두 번째 매개변수는 문자열이며, 그 안의 각 문자는 제거할 문자로 제거됩니다. 예:
<code><span><span><?php</span><span>echo</span> rtrim(<span>"blakefezabc"</span>, <span>"cab"</span>); <span>//output blakefez</span></span></code>
예, 출력 결과는 blakefez입니다.
이 함수의 구현은 비교적 간단해야 합니다.
① 첫 번째 매개변수의 마지막 문자부터 왼쪽으로 탐색하여 해당 바이트가 두 번째 매개변수에 있는지 확인합니다.
② 존재하는 경우 바이트를 제거하고 첫 번째 단계를 계속합니다. 그렇지 않다면 종료하세요.
위에서는 바이트를 사용했습니다. 예, 이 함수는 멀티바이트로부터 안전하지 않습니다. 즉, 매개변수의 일부 문자가 멀티바이트인 경우 원하지 않는 결과가 발생합니다. 예를 들어, 처음에 언급한 rtrim("伟,", ",")입니다. "Wei"와 ","는 모두 utf8로 인코딩되어 있기 때문입니다. 즉, 멀티바이트 문자입니다. 그 중 "威"의 인코딩은 0xE5 0xA8 0x81이고 ","의 인코딩은 0xE3 0x80 0x81입니다. 따라서 rtrim 함수의 눈에는 다음과 같이 보입니다. rtrim("0xE5 0xA8 0x81 0xE3 0x80 0x81 ", "0xE3 0x80 0x81”); 따라서 최종 출력 결과는 0xE5 0xA8입니다. 이때 utf8 인코딩으로 변환하면 왜곡됩니다.
위 내용은 rtrim 기능의 단점을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.