• 締切済み

PHP 文字列抽出

はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕  あいaうえおか(23バイト)       ↓(substrにより10バイトを抽出して末尾に…を追加)  あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示し

みんなの回答

  • wp_
  • ベストアンサー率54% (132/242)
回答No.6

すんません結合のところ間違い。  $ii++; ↓  $position++; 無限ループになるorz

  • wp_
  • ベストアンサー率54% (132/242)
回答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/index.html
  • ma2shin
  • ベストアンサー率41% (69/167)
回答No.4

6文字を抽出ということでしたら以下でいけると思います。 $_POST['str'] = "あいaうえおか"; $_POST['newstr']=mb_substr($_POST['str'],0,8); echo $_POST['newstr'];

  • wp_
  • ベストアンサー率54% (132/242)
回答No.3

pack()で10byte目を取得  →マルチバイトの1byte目だったら9バイト目までの情報を取得  →それ以外だったら10byte目まで取得 または pack()で10byte目を取得  →通常のASCIIだったら10byte目まで取得  →それ以外だったら9byte目まで取得 といった流れになります。 文字コードが固定であるならば前者を、そうでないなら後者を組むと良いです。 mb系関数で出来ないことも無いですが、他人が見て分かりやすいかどうかでいえば pack()を使ったほうが良かろうと思います。 具体的なコードは他の人に期待。 今日の僕は店仕舞いです。

参考URL:
http://jp.php.net/pack
  • kalze
  • ベストアンサー率47% (522/1092)
回答No.2

mbstringを使って良いのかどうかで変わってきますが。 $str = "あいaうえおか"; $new_str = mb_strimwidth($str, 0, 10, "…") 半角を1、全角を2として合計10になるまでなので、3バイト以上使うエンコードで、そのエンコードで10バイトということなら使えませんけどね

回答No.1

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

参考URL:
http://oshiete1.goo.ne.jp/qa3259224.html
Beatle66
質問者

補足

ご回答ありがとうございます。 すみませんでした、既に出ていたのですね。 先ほど、gogo724275さんの作成した関数(hoge())を 利用させて頂きましたが、 hoge("あいaうえおか", 10, $foot = '') 下記のように表示されてしまいます。 あいaうえ・ 上記のように「・」が表示されてしまいます。 実際、「・」を表示しないようにしたいと考えています。 まず「・」が入っているかどうかを判断しなくては いけないと思いますが、「・」が入っているかどうかを 確認するスクリプトはあるのでしょうか。 もしお分かりでしたらご教授頂きたくよろしくお願い致します。

関連するQ&A