http://www.kanzaki.com/docs/jis-esc.html
JISコードとESCシーケンス
マルチバイトを使用しないJISコードに統一されて使われてはいかがでしょうか?
比較的簡単に使用できると思います
(半角カナも使おうと思えば使えます)
PHPエディタもJIS対応ですしね
読み込んだ日本語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)を
出力文字コードに統一する、というわけですね。
ありがとうございます。
引き続き、より詳しい解説や、具体的な類似スクリプトがあれば教えてください。
http://php.s3.to/man/function.mb-convert-encoding.html
文字エンコーディングを変換する
PHPの日本語マニュアルに例が載ってますよ。
http://php.s3.to/man/ref.mbstring.html
マルチバイト文字列 関数
ありがとうございます。
こちらの例は知っていましたが、ちょっと少なすぎて、
スキル不足の私にはここからスクラッチで作れなかったのです。
より詳しい事例があればお願いします。
mbstringを使ったRSSリーダーのPHPスクリプトがあればベストです。
ご紹介頂いた方には100ポイント差し上げます。
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;
}
===
ありがとうございます。
参考になります!
追記です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ファイルを読み込ませたいのです。
http://www.hatena.ne.jp/1082006529#
【mbstring/PHP】mbstring等を使って、マルチバイトに対応していないPHPスクリプトを日本語対応にさせる方法、またはmbstringを使ったPHP開発方法・スクリプト例を教えてく.. - 人力検索はてな
このzipファイルの中のtick.phpの中でmb_convert_encoding関数が使われています。
どちらのファイルでしょうか?
マルチバイト対応版関数による既存関数のオーバーロード
を行うことによりある程度対応可能だと思われます。
(個別のスクリプトによって若干の変更が必要な場合も
あります。)
上の解答のPHPマニュアルのところです。
設定ファイル php.iniの mbstring.func_overload
ディレクティブに0以外の 値を設定すれば良いです。
php.iniの設定を変更するだけというのは楽でよいですね。
早速試してみます。
ありがとうございます。
すみません。おっしゃってる方法が理解できませんでした。
mbstring関数を使わなくて済むように、マルチバイトは使わないようにするという意味でしょうか。
RSSファイルなど読み込む外部データがマルチバイトを利用している可能性がありますし、それは困難です。
また、http://php.s3.to/man/ref.mbstring.htmlにありますように、PHPではJISやSJISが動作しません。
そのためmbstringを利用する必要があると理解してます。
mbstringを使ったPHP開発手法や事例が知りたい内容です。