LoginSignup
3
2

More than 5 years have passed since last update.

DirCaster で かな漢字のタイトルなどをつかえるようにする。

Last updated at Posted at 2016-05-27

かな漢字のタイトルが表示されない

いまさらながら podcast しようとして mp3 ファイルをつくりました。
id3tagで タイトルなどを入力して ファイルを WEBサーバに転送しました。

podcast用のツールの DirCaster を インストールして 設定し、ブラウザで feedのURLへアクセスしたら タイトルが !? とかに なって せっかく 設定した文字が 表示されない。

DirCasterを解析してみる

ソースを よんでみると ID3タグが lib_getid3を つかっていて データがとりだせているのは echo を はさんで みて りかいできた。

読み出したtitleなどの情報を stripJunk() という 関数で 文字を すててるのがわかりました。asciiの国の人は 7bitの 世界でいいかもしれないけど かな漢字をつかう私は それでは だめなので まずは この関数を呼ばないことにしました。

ID3のバージョンによって ファイルに 記録されている文字コードが UTF-16だったりUTF-8だったりするので いつもの mb_convert_encoding() をつかって UTF-8 に変換します。
$this->title = mb_convert_encoding($tit, "UTF-8", "auto");
この部分を修正しても まだ ä»�æ�¥ãな 出力になっていたのでほかにも なにか変換してるだろうとと探したところ
title = htmlentities( $title );と HTMLエンティティに 変換してるところを発見 かな漢字で この関数を つかってはいけないので 必要最低限の変換を行うhtmlspecialchars() に修正しました。 ( mb_encode_numericentity() を使うほうが 良い可能性はありますが・・・出力の可読性重視で htmlspecialcharsにしました。)

そうしたところ ようやく期待通りに タイトルが 出力されるようになりました。

FEEDがただしいかチェック

feedvalidatorで チェックしたところ サーバの報告とXMLの内容が 不一致になってると 指摘されたので ヘッダ出力を修正して キャラコードを UTF-8 と宣言しました。
header('Content-type: text/xml; charset=UTF-8', true);

めでたしめでたし

追記(20170726)
ファイル名が 仮名漢字だと うまくいかないようです。

追記(2017/9/4)
PHPのバージョンによって htmlentitiesの エンコードパラメータの defaultが ちがうようで それが原因でした。

htmlentities($a) と なっているところを htmlentities($a,ENT_COMPAT,"UTF-8") に変更しました。

追記(2017/9/12)
うまく ダウンロードできない ファイルが 存在したので URLの作り方を 再考察して

$url = $rootMP3URL."/". str_replace("%2F", "/",rawurlencode($filename));

と rawencode して / を 元に戻すようにしました。

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2