はじめまして。PHPプログラミングの初心者で恐縮ですが、
ご質問させてください。
現在、携帯用HPを作成してPHPによりMYSQLからデータを
表示させるプログラミングを組んでいます。
そこで、DB(MYSQL)からデータを引っ張ってくる際に、
そのデータが長い場合には、
頭から10バイトを抽出して末尾に「…」を追加して
表示させるプログラミングを作成したいと考えております。
ところが、そのデータに半角文字が含まれ最後の10バイト目が
全角の場合、文字化けをしてしまいます。
-------------------------------------------
例)
〔データ〕
あいaうえおか(23バイト)
↓(substrにより10バイトを抽出して末尾に…を追加)
あいaうえ●…
●部分が文字化けする
-------------------------------------------
文字列の「お」の部分を1バイトで抽出している為、
文字化けしてしまっていると思いますが、
うまく「お」まで表示するか、もしくは「お」を
表示し
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
pack()じゃなくunpackだった。
以下はEUCの場合。
SJISでも同じ要領で出来ます。違うのは10byte目の判別。
$input = "fooもげもげ";
$arr = unpack("C*",$input);
// 10byte目が漢字の1byte目の場合は9byte目まで
// (配列は0を含むので、10byte目→$arr[9])
if($arr[9] > 161)
$out_position = 8;
// それ以外は10byte目まで
else
$out_position = 9;
// バイナリを結合
$output = "";
$position = 0;
while($position <= $out_position)
{
// $arrに入っているのは数字なのでasciiに直してあげないといけない
$output .= chr($arr[$position]); //chr()でasciiに戻す
$ii++;
}
echo $output;
文法エラーはご容赦。
参考URL:http://www.unixuser.org/~euske/doc/kanjicode/ind …
No.4
- 回答日時:
6文字を抽出ということでしたら以下でいけると思います。
$_POST['str'] = "あいaうえおか";
$_POST['newstr']=mb_substr($_POST['str'],0,8);
echo $_POST['newstr'];
No.3
- 回答日時:
pack()で10byte目を取得
→マルチバイトの1byte目だったら9バイト目までの情報を取得
→それ以外だったら10byte目まで取得
または
pack()で10byte目を取得
→通常のASCIIだったら10byte目まで取得
→それ以外だったら9byte目まで取得
といった流れになります。
文字コードが固定であるならば前者を、そうでないなら後者を組むと良いです。
mb系関数で出来ないことも無いですが、他人が見て分かりやすいかどうかでいえば
pack()を使ったほうが良かろうと思います。
具体的なコードは他の人に期待。
今日の僕は店仕舞いです。
参考URL:http://jp.php.net/pack
No.2
- 回答日時:
mbstringを使って良いのかどうかで変わってきますが。
$str = "あいaうえおか";
$new_str = mb_strimwidth($str, 0, 10, "…")
半角を1、全角を2として合計10になるまでなので、3バイト以上使うエンコードで、そのエンコードで10バイトということなら使えませんけどね
No.1
- 回答日時:
この回答への補足
ご回答ありがとうございます。
すみませんでした、既に出ていたのですね。
先ほど、gogo724275さんの作成した関数(hoge())を
利用させて頂きましたが、
hoge("あいaうえおか", 10, $foot = '')
下記のように表示されてしまいます。
あいaうえ・
上記のように「・」が表示されてしまいます。
実際、「・」を表示しないようにしたいと考えています。
まず「・」が入っているかどうかを判断しなくては
いけないと思いますが、「・」が入っているかどうかを
確認するスクリプトはあるのでしょうか。
もしお分かりでしたらご教授頂きたくよろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
CD R の書き込み
-
COBOLのCOMP形式について
-
URLは最高何文字まで可能なので...
-
ピクセル,dpiから容量(バイト...
-
1バイト文字から2バイト文字に変換
-
ビットスワップとバイトスワッ...
-
MIDIにおいて ステータスバイト...
-
SQLで1バイト、2バイト混在...
-
バイト列とバイナリ列の違いが...
-
COBOL PICTUREで X,S,Vの意味
-
C言語について
-
64bit対応
-
日本語で関数名等を記述するの...
-
GetWindowTextでアドレスバーか...
-
シフトJISの2バイト文字
-
機種依存文字をチェックしたい。
-
WMAのタグ情報はどこにある?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
VBAでShift-JISのURLエンコード
-
ピクセル,dpiから容量(バイト...
-
「1TB」のHDDに日本語は何字入...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
Javaで日本語1文字のバイト数
-
UCS-2の一覧表が欲しい
-
3バイト文字(UTF-8)をprintfで...
-
:(コロン)のKeyCode
-
【VB2005】テキストボックス内...
-
64bit対応
-
URLは最高何文字まで可能なので...
-
機種依存文字をチェックしたい。
おすすめ情報