- ベストアンサー
php4 SJISの環境で2バイト文字の扱い方
- php4 SJISの環境で2バイト文字の扱いで悩んでいます。4バイト以内に正しく収める方法はありますか?
- $test変数には「あaいbうえ」という文字があります。4バイト以内に正しく収める場合、次の4バイト取得時に読まなかった分から始めて取得する方法はありますか?
- mb_系の関数は文字数で判定するため、今回の目的で使えません。何か良い方法はありますか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- VB6での文字コードダンプ
VB6を使用して文字のダンプを取得したいのですが、UNICODE→SJIS変換しての バイト長を取得するものはよく見かけるのですが、全角文字の文字コードの取得法は、調べてはいるのですがなかなか見つかりません。 行いたいことは、全角の"あ"の場合、0x82、0xa0のように SJISでの1バイト毎の16進(10進でも可)の文字コードを 取得したいということです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- PHP 文字列抽出
はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕 あいaうえおか(23バイト) ↓(substrにより10バイトを抽出して末尾に…を追加) あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示し
- 締切済み
- PHP
- 全角半角あわせて3文字
全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。
- ベストアンサー
- PHP
- PHP 文字列抽出
はじめまして。PHPプログラミングの初心者で恐縮ですが、 ご質問させてください。 現在、携帯用HPを作成してPHPによりMYSQLからデータを 表示させるプログラミングを組んでいます。 そこで、DB(MYSQL)からデータを引っ張ってくる際に、 そのデータが長い場合には、 頭から10バイトを抽出して末尾に「…」を追加して 表示させるプログラミングを作成したいと考えております。 ところが、そのデータに半角文字が含まれ最後の10バイト目が 全角の場合、文字化けをしてしまいます。 ------------------------------------------- 例) 〔データ〕 あいaうえおか(23バイト) ↓(substrにより10バイトを抽出して末尾に…を追加) あいaうえ●… ●部分が文字化けする ------------------------------------------- 文字列の「お」の部分を1バイトで抽出している為、 文字化けしてしまっていると思いますが、 うまく「お」まで表示するか、もしくは「お」を 表示しないようにプログラミングをしたいのですが、 どのように組めばよいかわかりません。 非常に初歩的なご質問で恐縮ですがご教授頂けると ありがたく思います。 どうぞよろしくお願い致します。
- 締切済み
- PHP
- IE6で文字化け します。
IE6で文字化け します。 以下のURLが、IE6で文字化けします。(IE8やMozillaでは正常です) http://cgi.geocities.jp/rhcpf907/fml2tex/?%BC%B0%A1%E3%20%A6%B2_{n=1}^N%20a_n%20%A6%B7_n%A1%A2%A6%B2_{m=1}^M%20b_m%20%A6%B5_m%20%A1%E4%20%A1%E1%A6%B2_{n=1}^N%A1%A1%A6%B2_{m=1}^M%A1%A1a_n^{*}b_m%20%A1%E3%A6%B7_n%A1%A2%A6%B5_m%20%A1%E4 IE8と見比べて頂けるとわかるのですが、<や> がおかしくなります。 回避策がありましたら、お教え下さい。 プログラムは、以下です。 $qstr = rawurldecode($_SERVER["QUERY_STRING"] ); : : if (strlen($qstr) <= 2){ return 'CanNotEncode'; } // 自動検出 $encd = mb_detect_encoding($qstr, 'EUC-JP,SJIS,UTF-8,JIS'); if ($encd != ''){ $expr = mb_convert_encoding($qstr,"SJIS", $encd); if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){ return $expr; } } // Yahooブログ(EUC-JP) だけは救う $expr = mb_convert_encoding($qstr,"SJIS", 'EUC-JP'); if ( mb_substr('式',0,1,'SJIS') == mb_substr($expr,0,1,'SJIS') ){ return $expr; } return 'EncodeFail ['.substr($qstr,0,8).']'; } : : // $exprから"式”を取り去って全角→半角にして MineTeX.cgi に渡す
- ベストアンサー
- PHP
- awkでバイト数を方法
文字列$2を300文字まで切り取る方法は substr($2,1,300)ですが、 全角半角が混在している文字列を 先頭から300バイト取得する方法が分かりません。 お手数をおかけしますが、 ご教授願いします。
- ベストアンサー
- その他(プログラミング・開発)
- 文字列の先頭から指定バイトだけ取得
質問があります。 1バイト文字が来ても2バイト文字が来ても 表示時に視覚的に同じ長さを返す関数が作りたいのですがうまくいきません。 $str1 = "あああaあ"; $str2 ="aaaaaaaaa"; function hoge($str) { return mb_substr($str, 0, 5); } これだと表示した場合に あああaあ aaaaa となってしまいます。 mb_substrをsubstrにすると2バイト文字の途中をsubstrで指定してしまうと文字化けしてしまいます。 何かうまい回避方法はないでしょうか? よろしくお願いいたします。
- ベストアンサー
- PHP
- Excelで22バイトの文字を数えたい
Excel2002です。 VBAでセルの文字列を取得する時に全角制御文字(2バイト)を含めて22バイトの制限を考慮したいのですがその方法がわかりません。 全角文字だけなら10文字、 半角文字だけなら22文字の取得ができます。 その後の作業の都合上、22バイトを基準に条件判断したいのですが現在はその方法がわからないためLEN()で10を上限としています。LENB()でも同じ結果(文字数が返される)になります。 対象のセルには全角文字/半角文字が混在しており、全角-半角-全角-半角のような混在であれば制御文字を2回考慮する必要があります。 最悪その文字が全角か半角かの区別がつけば対応できると思います。 よい方法をご教授いただきたくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- 全角半角混在の文字列から○文字まで取得する方法
はじめまして! MySQLから取得した文字列をPHPで例えば10文字まで表示したいのですが、良いやり方ありますでしょうか? 文字列には全角半角が混在しているので substr関数だと、うまく取得できない場合があります。よろしくお願いいたします。
- ベストアンサー
- PHP
- SJIS→UTF-8の文字コード変換
Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。
- ベストアンサー
- Perl