はじめまして。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で質問しましょう!
似たような質問が見つかりました
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Android(アンドロイド) 海外のAndroid 端末の場合、日本語全角は、どう表示されるのでしょうか? 1 2022/10/02 21:16
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP 文字列を段落で分ける方法を教えて下さい。 2 2023/03/09 10:03
- その他(プログラミング・Web制作) ワードプレスのプラグインであるAddQuicktagを使いたいが… 3 2022/04/18 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
char str[256]の256の意味は?
-
10Mバイトて文字数に すると何...
-
ビットスワップとバイトスワッ...
-
COBOLのCOMP形式について
-
ピクセル,dpiから容量(バイト...
-
バイナリとBCDコード
-
日付時刻を4バイトに
-
windowsのファイルパス最大文字数
-
Excel VBA で Oracle CLOB型カ...
-
UCS-2の一覧表が欲しい
-
半角、全角の判別方法
-
バイト列とバイナリ列の違いが...
-
全角半角を調べるライブラリ関...
-
ソケット通信の受信サイズ
-
機種依存文字をチェックしたい。
-
[VBScript][wsh]byte単位でのデ...
-
1KBが1024byteな理由
-
2バイト文字の判定はString#get...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
バイナリとBCDコード
-
バイト列とバイナリ列の違いが...
-
ビットスワップとバイトスワッ...
-
ピクセル,dpiから容量(バイト...
-
SQLで1バイト、2バイト混在...
-
Javaで日本語1文字のバイト数
-
「1TB」のHDDに日本語は何字入...
-
機種依存文字をチェックしたい。
-
VBAでShift-JISのURLエンコード
-
GetWindowTextでアドレスバーか...
-
COBOL PICTUREで X,S,Vの意味
-
【VB2005】テキストボックス内...
-
URLは最高何文字まで可能なので...
-
1KBが1024byteな理由
-
ワイド文字のバイト数が取得で...
おすすめ情報