PHP에서 한글 문자열을 substr로 자르게 되면 아래와 같이 깨져서 나오게 됩니다.
substr은 1byte씩 자르기 때문에 2byte인 한글은 정상적으로 나오지 않게 됩니다.
한글은 mb_substr 함수를 사용하면 해결이 됩니다.
문법은 아래와 같습니다.
앞의 문법은 substr과 같고 마지막 옵션에 인코딩 방식만 지정을 하면 됩니다.
string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )
string mb_substr(문자열, 시작위치, 나타낼 길이, 인코딩방식);
mb_substr($key, 0, 2, 'utf-8');
인코딩 방식은 UTF-8, EUC-KR 둘 중 하나를 넣으면 됩니다.
일반적으로 UTF-8을 넣으면 문제 없이 한글이 깨짐 없이 나오게 됩니다.
최근 대부분의 웹문서가 UTF-8로 되어 있기 때문입니다.
만약 웹 문서가 EUC-KR로 지정이 되어 있다면 EUC-KR로 하면 됩니다
아래 소스를 보시면 한번에 이해가 되실 겁니다.
<?php
header('Content-Type: text/html; charset=utf-8');
// 보험사 랜딩 URL
$INSUR_COMP_URL = array (
"한화손해보험"=>"https://www.hanwhadirect.com",
"흥국화재해상보험"=>"https://www.eyoudirect.co.kr",
"롯데손해보험"=>"http://www.lottehowmuch.com/",
"삼성화재해상보험"=>"https://direct.samsungfire.com",
"하나손해보험"=>"https://www.educar.co.kr/",
"현대해상화재보험"=>"https://direct.hi.co.kr/",
"메리츠화재해상보험"=>"https://store.meritzfire.com/",
"캐롯손해보험"=>"https://www.carrotins.com/"
);
foreach($INSUR_COMP_URL as $key=>$value)
{
echo $key . '<br />';
echo substr($key,0,2) . '***' . '<br />';
echo mb_substr($key,0,2,'utf-8') . '***';
echo "<hr />";
}
/* $result
한화손해보험
�***
한화***
흥국화재해상보험
�***
흥국***
롯데손해보험
�***
롯데***
삼성화재해상보험
�***
삼성***
하나손해보험
�***
하나***
현대해상화재보험
�***
현대***
메리츠화재해상보험
�***
메리***
캐롯손해보험
�***
캐롯***
*/
?>
2020/06/15 - [유용한 활용팁] - PHP 연관 배열의 Key, Value 조회 방법