Programming/$_머니 (PHP)

[Laravel] 라라벨 Slug 한글 이슈

귀찮은 개발자 2024. 2. 21. 01:57

Helper 함수 Slug

Str::slug('대한 독립 만세', '-')

아래와 같이 코드를 작성할 경우 한글이 출력되지 않는다.
그 이유는 문자열을 ASCII로 변환하기 때문이다.

한글은 유니코드 이기 때문에 ASCII 로 변환된 Slug 에서는 해당 이슈를 처리하지 못한다.

Route::get('/',  function (){
    return \Illuminate\Support\Str::slug("대한 독립 만세", '-');
});

Str::slug('대한 독립 만세', '-', 'ko')

Slug 에는 3개의 인자를 작성해야한다.
Str::slug('문자', '바꿀거', '언어');

하지만 문자를 ASCII 로 변환하기 때문이 한글은 출력되지 않는다.
하지만 PHP ext-intl 익스텐션을 통해 한글이 출력되지 않는 대신 한글 발음을 영어 단어로 음차하는 방법으로 처리해준다.

Route::get('/',  function (){
    return \Illuminate\Support\Str::slug("대한 독립 만세", '-', 'ko');
});

PHP preg_replace 메소드 이용

원하는 결과를 출력하기 위해 아래 방법을 이용했다.
정규식을 통해 영문, 한글, 숫자를 제외하고는 문자를 없애준다. 또한 공백은 - 으로 변경해준다.

Route::get('/',  function (){
    $title = trim("대한 독립 만세 ㄱ # $@# 89&$#@ ㅁㄴㅇ ");
    return strtolower(preg_replace('/[^a-zA-Z가-힣0-9]+/', '-', $title));
});