- 締切済み
PHP 文字列抽出
はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕 あいaうえおか(23バイト) ↓(substrにより10バイトを抽出して末尾に…を追加) あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示し
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- wp_
- ベストアンサー率54% (132/242)
すんません結合のところ間違い。 $ii++; ↓ $position++; 無限ループになるorz
- wp_
- ベストアンサー率54% (132/242)
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; 文法エラーはご容赦。
- ma2shin
- ベストアンサー率41% (69/167)
6文字を抽出ということでしたら以下でいけると思います。 $_POST['str'] = "あいaうえおか"; $_POST['newstr']=mb_substr($_POST['str'],0,8); echo $_POST['newstr'];
- wp_
- ベストアンサー率54% (132/242)
pack()で10byte目を取得 →マルチバイトの1byte目だったら9バイト目までの情報を取得 →それ以外だったら10byte目まで取得 または pack()で10byte目を取得 →通常のASCIIだったら10byte目まで取得 →それ以外だったら9byte目まで取得 といった流れになります。 文字コードが固定であるならば前者を、そうでないなら後者を組むと良いです。 mb系関数で出来ないことも無いですが、他人が見て分かりやすいかどうかでいえば pack()を使ったほうが良かろうと思います。 具体的なコードは他の人に期待。 今日の僕は店仕舞いです。
- 参考URL:
- http://jp.php.net/pack
- kalze
- ベストアンサー率47% (522/1092)
mbstringを使って良いのかどうかで変わってきますが。 $str = "あいaうえおか"; $new_str = mb_strimwidth($str, 0, 10, "…") 半角を1、全角を2として合計10になるまでなので、3バイト以上使うエンコードで、そのエンコードで10バイトということなら使えませんけどね
- gogo724275
- ベストアンサー率16% (1/6)
過去にまったく同じ質問をしました。
補足
ご回答ありがとうございます。 すみませんでした、既に出ていたのですね。 先ほど、gogo724275さんの作成した関数(hoge())を 利用させて頂きましたが、 hoge("あいaうえおか", 10, $foot = '') 下記のように表示されてしまいます。 あいaうえ・ 上記のように「・」が表示されてしまいます。 実際、「・」を表示しないようにしたいと考えています。 まず「・」が入っているかどうかを判断しなくては いけないと思いますが、「・」が入っているかどうかを 確認するスクリプトはあるのでしょうか。 もしお分かりでしたらご教授頂きたくよろしくお願い致します。