728x90

위 이미지를 보면 utm_term 컬럼엔 화살표가 붙어서 아래로 떨어집니다.
보통 \n 이 값이 있으면 자동으로 이미지처럼 화살표를 붙이는데 지금 같은 경우는 그런 게 없는데도 화살표가 붙었네요.
dd() 는 내부적으로 Kint 라이브러리를 사용하고 있으며, RichRenderer::renderTab() 에 아래 코드가 있습니다. 아래 링크로 가셔서 561번째 줄을 보면 됩니다.
<?php
if (\preg_match('/(:?[\\r\\n\\t\\f\\v]| {2})/', $rep->getValue())) {
$show_contents = true;
}
개행 문자나 연속 공백이 있으면 자동으로 펼치는 로직인데, 문제는 이 정규식이 멀티바이트를 고려하지 않고 바이트 단위로 검사한다는 것이다.
$bytes = unpack('C*', '테');
// 결과: [237, 133, 140]
// 16진수: [0xED, 0x85, 0x8C]
두 번째 바이트 0x85가 유니코드 NEL (Next Line, U+0085) 과 값이 동일합니다.
Kint가 바이트 단위로 정규식을 돌리다가 이걸 개행 문자로 착각해서 펼치는 것 같네요.
"테"로 시작하는 글자들 중에 "테", "텐", "텔", "템" 등 모두 해당될 것으로 생각됩니다.
두 번째 바이트가 개행 관련 값과 겹치는 다른 글자들도 존재할 수 있어 보입니다.
Kint의 멀티바이트 문자열 처리 버그. preg_match 에 /u 플래그(유니코드 모드)를 사용했다면 발생하지 않았을 문제다라고 여겨지지만 잘 모르겠습니다.
예, 뻘짓이었습니다.
반응형
'Etc' 카테고리의 다른 글
| 각 나라별 국기 이미지 CDN (1) | 2025.08.28 |
|---|---|
| Summernote (2) | 2025.07.24 |
| Unknown column 'generation_expression' in 'field list' (0) | 2025.06.04 |
| 사업자등록번호 조회 (0) | 2025.05.27 |
| Firefox가 이 사이트에 안전하게 연결하는 것을 소프트웨어가 막고 있습니다. (0) | 2025.05.19 |

