【mbstring/PHP】mbstring等を使って、マルチバイトに対応していないPHPスクリプトを日本語対応にさせる方法、またはmbstringを使ったPHP開発方法・スクリプト例を教えてください。具体的には、英語のRSSファイルしか読み込めないRSSリーダーのスクリプトを、日本語RSSファイルも読み込めるようにしたいです。mbstringをインストール&有効にする方法は既に知っているので結構です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/04/15 14:22:09
  • 終了:--

回答(8件)

id:aki73ix No.1

aki73ix回答回数5224ベストアンサー獲得回数272004/04/15 14:24:29

ポイント5pt

http://www.kanzaki.com/docs/jis-esc.html

JISコードとESCシーケンス

マルチバイトを使用しないJISコードに統一されて使われてはいかがでしょうか?

比較的簡単に使用できると思います

(半角カナも使おうと思えば使えます)

PHPエディタもJIS対応ですしね

id:candle2002

すみません。おっしゃってる方法が理解できませんでした。

mbstring関数を使わなくて済むように、マルチバイトは使わないようにするという意味でしょうか。

RSSファイルなど読み込む外部データがマルチバイトを利用している可能性がありますし、それは困難です。

また、http://php.s3.to/man/ref.mbstring.htmlにありますように、PHPではJISやSJISが動作しません。

そのためmbstringを利用する必要があると理解してます。

mbstringを使ったPHP開発手法や事例が知りたい内容です。

2004/04/15 14:36:25
id:raby No.2

raby回答回数21ベストアンサー獲得回数02004/04/15 14:32:01

ポイント25pt

読み込んだ日本語RSSの文字コードを、出力とあわせてやればよいのでは?

変換後の文字列 = mb_convert_encoding([読み込んだ文字列],[変換後の文字コード], [読み込んだ文字列の文字コード]);

で良いと思います。

読み込んだ文字列の文字コードが知りたければ、

文字コード = mb_detect_encoding(文字列);

という形になります。

RSSファイルを読み込んでいる処理の時に、この関数を使えばよいと思います。

PHP4.3?以降であれば、プログラムの最初に

mb_language(”Ja”);

を入れてやらないといけないです

id:candle2002

初めに「mb_language(”Ja”);」で日本語を使うよと宣言して、

「mb_detect_encoding();」で文字コードを認識して、

それを元に「mb_convert_encoding();」を使って、日本語RSSのそれぞれ文字コード(euc-jp,Shift_JIS,utf-8)を

出力文字コードに統一する、というわけですね。

ありがとうございます。

引き続き、より詳しい解説や、具体的な類似スクリプトがあれば教えてください。

2004/04/15 16:37:14
id:sawa2 No.3

sawa2回答回数31ベストアンサー獲得回数02004/04/15 15:32:42

ポイント20pt

http://php.s3.to/man/function.mb-convert-encoding.html

文字エンコーディングを変換する

PHPの日本語マニュアルに例が載ってますよ。

http://php.s3.to/man/ref.mbstring.html

マルチバイト文字列 関数

id:candle2002

ありがとうございます。

こちらの例は知っていましたが、ちょっと少なすぎて、

スキル不足の私にはここからスクラッチで作れなかったのです。

より詳しい事例があればお願いします。

mbstringを使ったRSSリーダーのPHPスクリプトがあればベストです。

ご紹介頂いた方には100ポイント差し上げます。

2004/04/15 16:39:25
id:pons No.4

pons回答回数366ベストアンサー獲得回数82004/04/15 16:49:09

ポイント25pt

rss でなくて申し訳ないのですが、レッツphpさんの

写メールbbsをダウンロードしてみてください。

こちらの pop.php を mbで検索すると ヒントになるかと思いました。

===レッツphpさん pop.php

@mb_language(”Japanese”);

@mb_internal_encoding(”SJIS”);

/* 文字コードコンバートauto→SJIS */

function convert($str) {

if (function_exists(’mb_convert_encoding’)) {

return mb_convert_encoding($str, ”SJIS”, ”auto”);

} elseif (function_exists(’JcodeConvert’)) {

return JcodeConvert($str, 0, 2);

}

return true;

}

===

id:candle2002

ありがとうございます。

参考になります!

2004/04/15 17:45:44
id:aki73ix No.5

aki73ix回答回数5224ベストアンサー獲得回数272004/04/15 17:18:01

ポイント5pt

追記ですJISの仕組みは ESCコード 0x1bによって

後に来る文字がマルチバイトかシングルバイト文字か

検出します、文字コードの中身は ANSI文字+ESCコード

だけになりますから海外のRSSリーダのScriptでも基本的に問題なく動作するはずなのですがエディタによってはJIS対応してないのでこのように書かれてるのではないのでしょうか?

mbstring は文字コード検出でnovalue.autoの場合は、ASCII,JIS,UTF-8,EUC-JP,SJIS

の順番で検出するので JISの方が良いのではないかと思いました

UTFもEUCもSJIS結果的にMultibyteを使うのに対して

JISはマルチバイトコードがはいらないので安全だと

思います

id:candle2002

読み込むRSSファイルがEUCやSJISで書かれていたら、結局mbstringを使うことになるかと思うので、JISで完結させることは出来ないと思います。

mbstringを使う前提で、海外のRSSリーダーのスクリプトに日本語RSSファイルを読み込ませたいのです。

2004/04/15 17:48:55
id:doroyamada No.6

泥山田回答回数9ベストアンサー獲得回数02004/04/15 17:38:57

ポイント5pt

http://www.hatena.ne.jp/1082006529#

【mbstring/PHP】mbstring等を使って、マルチバイトに対応していないPHPスクリプトを日本語対応にさせる方法、またはmbstringを使ったPHP開発方法・スクリプト例を教えてく.. - 人力検索はてな

このzipファイルの中のtick.phpの中でmb_convert_encoding関数が使われています。

id:candle2002

どちらのファイルでしょうか?

2004/04/15 17:49:51
id:honera No.7

honera回答回数168ベストアンサー獲得回数02004/04/15 19:11:51

ポイント25pt

マルチバイト対応版関数による既存関数のオーバーロード

を行うことによりある程度対応可能だと思われます。

(個別のスクリプトによって若干の変更が必要な場合も

あります。)

上の解答のPHPマニュアルのところです。

設定ファイル php.iniの mbstring.func_overload

ディレクティブに0以外の 値を設定すれば良いです。

id:candle2002

php.iniの設定を変更するだけというのは楽でよいですね。

早速試してみます。

ありがとうございます。

2004/04/16 14:35:34
id:doroyamada No.8

泥山田回答回数9ベストアンサー獲得回数02004/04/16 10:23:10

ポイント10pt

間違えました。こちらです。

id:candle2002

ありがとうございます。

2004/04/19 17:02:59
  • id:candle2002
    doroyamadaさんに85ポイントお送りしました。

    mb_stringを使ったPHPスクリプトをご紹介いただいたdoroyamadaさんに、
    別途85ポイント(合計100ポイント)をお送りいたしました。
    ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません