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));
});