人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpで文字列の切り取りが上手く行きません。

例えば、
「あいうえおかきくけこsasiすせsoなにぬねの」
という文字列があり、
ここから「初めの15文字(半角30文字分)」を切り出したいとします。

そこで、mb_substrを使っているのですが、うまくいきません。

「切り出した文字」+「<BR><BR>」として出力した場合、
たぶん日本語の途中で切り出された文字があると、
「あいうえおかきくけこsasiぜBR><BR>」
みたいに、なってしまいます。

うまく、日本語・半角英数字が混ざった文字列から、
「15文字(30バイト)」分を切り出し、web上で使える方法がありましたら、アドバイスをお願いします。

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:br PHP Web あいうえお アドバイス
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tezcello
●60ポイント

ひょっとして、Shift-JIS で書いたスクリプトを内部エンコードが Shift-JIS ではない環境で、エンコードを指示せずに使っていませんか?

うちで実験してみたら、

$str='あいうえおかきくけこsasiすせsoなにぬねの';
$sub=mb_substr($str, 0, 15,'Shift-JIS');
print $sub.'<br><br>';

で、結果は

あいうえおかきくけこsasiす<br><br>

となりました。特に問題ないです。

$sub=mb_substr($str, 0, 15); の場合は

あいうえおかき?

と文字化けします。


phpでスクリプトを書く場合、Shift-JIS は推奨されていない様ですね。perl互換の正規表現を使う場合とか、XML を使う場合とか...

(EUC-JP, UTF-8 などがいいみたいです。)


それでも Shift-JIS を使いたいのなら、

http://jp.php.net/manual/ja/ref.mbstring.php

例 1339. SJIS ユーザ用の php.iniの 設定

を参考に色々と設定を変更されると良いかも知れません。

(Shift-JIS用なのに、内部エンコーディングを EUC-JP に設定にしているのは変な気がしないでもないですが)


僕自身は、UTF-8 を使う事が多い(でもサーバのデフォルトはEUC-JP)なので、

set_magic_quotes_runtime(false);
ini_set('mbstring.http_input', 'pass');
ini_set('mbstring.http_output', 'pass');
mb_language('ja');
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

を「決まり文句」として、スクリプトの最初に入れておく事が多いです。

◎質問者からの返答

どうもありがとうございます。

文字コードのミスでした・・・。

決まり文句、いいですね。

UTF-8で書いてるので、決まり文句使わせていただきますね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ