プロが教える店舗&オフィスのセキュリティ対策術

はじめまして。PHPプログラミングの初心者で恐縮ですが、
ご質問させてください。

現在、携帯用HPを作成してPHPによりMYSQLからデータを
表示させるプログラミングを組んでいます。

そこで、DB(MYSQL)からデータを引っ張ってくる際に、
そのデータが長い場合には、
頭から10バイトを抽出して末尾に「…」を追加して
表示させるプログラミングを作成したいと考えております。

ところが、そのデータに半角文字が含まれ最後の10バイト目が
全角の場合、文字化けをしてしまいます。

-------------------------------------------
例)
〔データ〕
 あいaうえおか(23バイト)
  
   ↓(substrにより10バイトを抽出して末尾に…を追加)

 あいaうえ●…

●部分が文字化けする
-------------------------------------------

文字列の「お」の部分を1バイトで抽出している為、
文字化けしてしまっていると思いますが、

うまく「お」まで表示するか、もしくは「お」を
表示し

A 回答 (6件)

すんません結合のところ間違い。



 $ii++;

 $position++;

無限ループになるorz
    • good
    • 0

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 …
    • good
    • 0

6文字を抽出ということでしたら以下でいけると思います。



$_POST['str'] = "あいaうえおか";
$_POST['newstr']=mb_substr($_POST['str'],0,8);
echo $_POST['newstr'];
    • good
    • 0

pack()で10byte目を取得


 →マルチバイトの1byte目だったら9バイト目までの情報を取得
 →それ以外だったら10byte目まで取得

または
pack()で10byte目を取得
 →通常のASCIIだったら10byte目まで取得
 →それ以外だったら9byte目まで取得

といった流れになります。
文字コードが固定であるならば前者を、そうでないなら後者を組むと良いです。
mb系関数で出来ないことも無いですが、他人が見て分かりやすいかどうかでいえば
pack()を使ったほうが良かろうと思います。

具体的なコードは他の人に期待。
今日の僕は店仕舞いです。

参考URL:http://jp.php.net/pack
    • good
    • 0

mbstringを使って良いのかどうかで変わってきますが。



$str = "あいaうえおか";
$new_str = mb_strimwidth($str, 0, 10, "…")

半角を1、全角を2として合計10になるまでなので、3バイト以上使うエンコードで、そのエンコードで10バイトということなら使えませんけどね
    • good
    • 0

過去にまったく同じ質問をしました。



参考URL:http://oshiete1.goo.ne.jp/qa3259224.html

この回答への補足

ご回答ありがとうございます。
すみませんでした、既に出ていたのですね。

先ほど、gogo724275さんの作成した関数(hoge())を
利用させて頂きましたが、
hoge("あいaうえおか", 10, $foot = '')
下記のように表示されてしまいます。

あいaうえ・

上記のように「・」が表示されてしまいます。

実際、「・」を表示しないようにしたいと考えています。

まず「・」が入っているかどうかを判断しなくては
いけないと思いますが、「・」が入っているかどうかを
確認するスクリプトはあるのでしょうか。

もしお分かりでしたらご教授頂きたくよろしくお願い致します。

補足日時:2007/11/07 17:31
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!