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