BLOGブログ

Laravel5.8のcolumn-sortable日本語が出力されないバグ解消

takefushi / 2019.07.30

Web関連 システム開発

laravel5.8のソート機能(Kyslik/column-sortable)で日本語を入力すると出力されない問題を対応しましたのでご紹介します。

@sortablelink('email','メールアドレス'); とソースに書いた際、それは発生しました。

どこのサイトにも取り上げておらず、えっ何故??とういことで解決に少し時間がかかってしまったので、同じように悩まれた方がいたら参考までに載せておきます。

率直に伝えると原因は、sortablelink関数内でおこなっている、出力する文字の頭文字を大文字にするucfirst関数が原因でした。

これに日本語を入れると何故か出力されない。。。

頭文字に半角文字を入れると、何故か日本語が出力され、最初全てに半角文字を入れようかと思いましたが美しなく、そしてめんどいので、直接ソースをいじりました。

ソース場所:vendor/kyslik/column-sortable/src/ColumnSortable/SortableLink.php 100行目辺り

$title = call_user_func($formatting_function, $title);

↑この部分が原因です。なので、以下のように修正。

if(!preg_match("/^[ぁ-んァ-ヶー一-龠]+$/u",$title)) $title = call_user_func($formatting_function, $title);

日本語以外のときに頭文字を大文字に変換してね!という形に変更しました。
ちなみに$formatting_functionにucfirstが入れられています。

たったこれだけで、無事、@sortablelink(‘email’,’メールアドレス’);で日本語のメールアドレスが出力されるようになりました。