PHP code example of wttks / laravel-str-ja
1. Go to this page and download the library: Download wttks/laravel-str-ja library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
wttks / laravel-str-ja example snippets
use Illuminate\Support\Str;
// UTF-8 → SJIS-win(異体字・互換文字を自動正規化してから変換)
$sjis = Str::toSjis('髙橋㈱の﨑山支店');
// → SJIS-winバイト列(正規化後: 高橋(株)の崎山支店)
// SJIS-win → UTF-8
$utf8 = Str::fromSjis($sjis);
// → '高橋(株)の崎山支店'
// 正規化のみ(文字コード変換なし)
$normalized = Str::normalizeForSjis('髙橋㈱の﨑山支店');
// → '高橋(株)の崎山支店'(UTF-8のまま)
// SJIS-win 変換後のバイト数
Str::sjisBytes('日本語'); // → 6(1文字2バイト×3)
Str::sjisBytes('㈱', normalize: true); // → 4(正規化後 (株) = 4バイト)
// バイト数指定で切り捨て(文字の途中で切らない)
Str::truncateSjis('日本語テスト', 6); // → '日本語'(6バイトまで)
Str::truncateSjis('日本語テスト', 7); // → '日本語'(7バイト目は次の文字の途中)
use Wttks\StrJa\SjisConverter;
$sjis = SjisConverter::toSjis($utf8String);
$utf8 = SjisConverter::fromSjis($sjisString);
$normalized = SjisConverter::normalize($utf8String);
$bytes = SjisConverter::byteLength($utf8String, normalize: false);
$truncated = SjisConverter::truncateByBytes($utf8String, 20);
// UTF-8 → eucJP-win
$euc = Str::toEuc('髙橋㈱テスト');
// eucJP-win → UTF-8
$utf8 = Str::fromEuc($euc);
// 正規化のみ
$normalized = Str::normalizeForEuc('髙橋㈱テスト');
// 半角カナ → 全角、全角ASCII → 半角、不可視制御文字削除
Str::normalizeJa('ガイドABC123');
// → 'ガイドABC123'
// punctuation: true で一般句読点も変換
Str::normalizeJa('"テスト"…続く', punctuation: true);
// → '"テスト"...続く'
// 半角カナ→全角 + 全角ASCII→半角 + 連続空白の正規化 + 前後トリム
Str::sanitizeJa(' ガイド ABC 123 ');
// → 'ガイド ABC 123'
// 半角カナの濁音・半濁音を1文字に結合
Str::sanitizeJa('パソコン'); // → 'パソコン'
// 全角スペース・タブ・改行も半角スペース1つに
Str::sanitizeJa("山田 太郎\n鈴木"); // → '山田 太郎 鈴木'
// トラブル文字も削除
Str::sanitizeJa("\u{FEFF}テスト\u{200B}入力"); // → 'テスト入力'
// punctuation: true で一般句読点も変換
Str::sanitizeJa('"テスト"…続く', punctuation: true);
// → '"テスト"...続く'
// 連続した空白(全角・半角・タブ・改行・NBSP等)を半角スペース1つに
Str::squishJa('山田 太郎'); // → '山田 太郎'
Str::squishJa(' Hello World '); // → 'Hello World'
// 前後の空白もトリム
Str::squishJa(' 山田太郎 '); // → '山田太郎'
// トラブル文字も除去(Str::squish() との違い)
Str::squishJa("Hel\x00lo"); // → 'Hello'(NULLバイト削除)
Str::squishJa("日本語\u{200B}テスト"); // → '日本語テスト'(ゼロ幅スペース削除)
// カタカナ・半角カナ → ひらがな
Str::toHiragana('アイウエオ'); // → 'あいうえお'
Str::toHiragana('ガイド'); // → 'がいど'
Str::toHiragana('ヴ'); // → 'ゔ'
// ひらがな・半角カナ → 全角カタカナ
Str::toKatakana('あいうえお'); // → 'アイウエオ'
Str::toKatakana('ガイド'); // → 'ガイド'
Str::toKatakana('ゔ'); // → 'ヴ'
// 全体判定: フリガナバリデーション等で使用
Str::isKatakana('ヤマダタロウ'); // → true(全角カタカナのみ)
Str::isKatakana('ヤマダタロウ'); // → false(半角カナは不可)
Str::isKatakana('やまだたろう'); // → false(ひらがな不可)
Str::isHiragana('やまだたろう'); // → true(ひらがなのみ)
Str::isHiragana('スズキイチロー'); // → false
// 含む判定: 混在テキストの検査等で使用
Str::hasKanji('日本語テスト'); // → true
Str::hasKanji('テストABC'); // → false
Str::hasHiragana('日本語のABC'); // → true
Str::hasKatakana('アイウのABC'); // → true(半角カナは対象外)
Str::hasJapanese('山田 Taro'); // → true(漢字を含む)
Str::hasJapanese('Yamada Taro'); // → false
// フリガナ判定(空白許容、ひらがな・カタカナどちらかで統一)
Str::isFurigana('ヤマダ タロウ'); // → true
Str::isFurigana('やまだ たろう'); // → true
Str::isFurigana('やまだタロウ'); // → false(混在NG)
Str::isFurigana('山田太郎'); // → false(漢字NG)
Str::isFurigana('やまだ', 'hiragana'); // → true(ひらがなのみ許可)
Str::isFurigana('ヤマダ', 'katakana'); // → true(カタカナのみ許可)
use Wttks\StrJa\EncodingDetector;
// エンコーディングを判定(ASCII → UTF-8 → SJIS-win → eucJP-win の順で厳密に判定)
Str::detectEncoding('日本語'); // → 'UTF-8'
Str::detectEncoding('Hello'); // → 'ASCII'
Str::detectEncoding(SjisConverter::toSjis('日本語')); // → 'SJIS-win'
// 真偽値で判定(ASCIIのみの文字列は全てのエンコーディングでtrueを返す)
Str::isUtf8('日本語'); // → true
Str::isUtf8('Hello'); // → true(ASCIIはUTF-8互換)
Str::isSjis($sjisBytes); // → true
Str::isEuc($eucBytes); // → true
Str::isAscii('Hello'); // → true
Str::isAscii('日本語'); // → false
// 判定
Str::hasTroubleChars("Hel\x00lo"); // → true(NULLバイト)
Str::hasTroubleChars("\u{FEFF}Hello"); // → true(BOM)
Str::hasTroubleChars("日本語\u{200B}テスト"); // → true(ゼロ幅スペース)
Str::hasTroubleChars("Hello\tWorld"); // → false(タブは通常テキスト)
// 削除
Str::removeTroubleChars("\u{FEFF}Hello"); // → 'Hello'
Str::removeTroubleChars("日本語\u{200B}テスト"); // → '日本語テスト'
use Wttks\StrJa\JaNormalizer;
// 全角・半角・特殊スペースで分割
Str::splitWords('Hello World'); // → ['Hello', 'World']
Str::splitWords('山田 太郎 鈴木'); // → ['山田', '太郎', '鈴木'](全角スペース)
Str::splitWords("a\u{00A0}b"); // → ['a', 'b'](NBSP)
// 単語数カウント
JaNormalizer::countWords('Hello World'); // → 2
JaNormalizer::countWords('山田 太郎'); // → 2
JaNormalizer::countWords(''); // → 0
// 文字幅(全角=2、半角=1)
Str::strWidth('日本語'); // → 6
Str::strWidth('Hello'); // → 5
Str::strWidth('日本Hello'); // → 9
// FormRequest での使用例
public function rules(): array
{
return [
'name' => ['word_count:200'],
];
}
// 通常の日本語 → 完全一致で戻る
SjisConverter::fromSjis(SjisConverter::toSjis('日本語テスト')) === '日本語テスト'; // true
// 異体字あり → 正規化後の文字で戻る
SjisConverter::fromSjis(SjisConverter::toSjis('髙橋')) === '高橋'; // true('髙橋'ではない)
bash
php artisan vendor:publish --tag=str-ja-lang