人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: candle2002
●カテゴリ:ウェブ制作
✍キーワード:PHP RSS RSSリーダー インストール スクリプト
○ 状態 :終了
└ 回答数 : 8/8件

▽最新の回答へ

1 ● aki73ix
●5ポイント

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

JISコードとESCシーケンス

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

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

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

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

◎質問者からの返答

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

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

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

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

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

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


2 ● raby
●25ポイント

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

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

で良いと思います。

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

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

という形になります。

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

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

mb_language(”Ja”);

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

◎質問者からの返答

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

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

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

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

ありがとうございます。

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


3 ● sawa2
●20ポイント

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

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

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

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

マルチバイト文字列 関数

◎質問者からの返答

ありがとうございます。

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

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

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

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

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


4 ● pons
●25ポイント

http://php.s3.to/bbs/bbs7.php

レッツPHP!

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;

}

===

◎質問者からの返答

ありがとうございます。

参考になります!


5 ● aki73ix
●5ポイント

http://oneshot.oops.jp/php/mb.html

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

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

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

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

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

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

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

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

思います

◎質問者からの返答

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

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


1-5件表示/8件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ