개요
laravel framework 에서는 문장을 slug 형식으로 만들어 주는 slug helper 를 제공합니다.
use Illuminate\Support\Str;
$slug = Str::slug('Laravel Framework is cool', '-');
// "laravel-framework-is-cool"
PHP
하지만 저 함수는 한글등 아시아권 문자에 대한 고려가 되어 있지 않으므로 입력이 한글일 경우 모두 날려 버립니다.
use Illuminate\Support\Str;
$slug = Str::slug('한글 漢子 test', '-');
// "test"
PHP
만약 영어가 없는(한글, 한자, 일어만 있는) 입력이라면 slug 가 null 이 되는 문제가 있습니다.
이를 해결하기 위해서는 한글로 유지하는 별도의 slug 함수를 만드는 방법이 있지만 PHP 에서 제공하는 국제화 함수인 Intl extension 을 이용해서 한글 발음을 영어 단어로 음차(음역;transliteration)하는 방법도 있습니다.
$slug = transliterate_slug('한글 漢子 test', '-');
// "hangeul han zi test"
PHP
음차하기
음차 기능을 사용하려면 먼저 ext-intl 이 설치되어 있어야 합니다.
sudo apt install php8.0-intl
BASH
다음과 같이 Transliterator 클래스의 transliterate 기능을 사용해서 입력을 음차한 후에 slug 헬퍼에 전달해 주면 한글/한자 유실없이 slug 로 만들수 있습니다.
function transliterate_slug(string $value) : string
{
$tr = \Transliterator::create('Any-Latin; Latin-ASCII');
$tr_value = $tr->transliterate($value);
return Str::slug($tr_value);
}
PHP
$v = 'test 한글 漢子 똠방';
$s = transliterate_slug($v);
// $s = "test-hangeul-han-zi-ttombang"
PHP
같이 보기
Ref