ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

mb_encode_mimeheader関数とmb_decode_mimeheader関数

コレなんですが。あいたたた。。。自爆しちゃったよ。(w
普段、この関数を使ってないからなぁ。。。


頂いたソースを見て感じたのが、mb_encode_mimeheaderの件に関しては
第2引数のcharsetの意味合いを間違えていたようです。


(例えば)mb_substr関数のencoding引数を定義した時と同じ動作するモノ
だと捉えていたようですね。それが根本の間違い?
ゴミスレッド失礼シマシタ(ただ、そういう動作が理想ですねぇ)。


理想に近づける為に(まず)ソースを覗いてみました。
2928	PHP_FUNCTION(mb_encode_mimeheader)
2973 mbfl_string_init(&string);
2974 mbfl_string_init(&result);
2975 string.no_language = MBSTRG(current_language);
2976 string.no_encoding = MBSTRG(current_internal_encoding);
2977 string.val = Z_STRVAL_PP(argv[0]);
2978 string.len = Z_STRLEN_PP(argv[0]);
2979 ret = mbfl_mime_header_encode(&string, &result, charset, transenc, linefeed, 0);

2990 PHP_FUNCTION(mb_decode_mimeheader)
2999 mbfl_string_init(&string);
3000 mbfl_string_init(&result);
3001 string.no_language = MBSTRG(current_language);
3002 string.no_encoding = MBSTRG(current_internal_encoding);
3003 string.val = (unsigned char *)Z_STRVAL_PP(arg_str);
3004 string.len = Z_STRLEN_PP(arg_str);
3005 ret = mbfl_mime_header_decode(&string, &result, MBSTRG(current_internal_encoding));

internal_encodingを固定でセットしてるのでkomuraさんが指摘した通りにしないと正しく動作しないんだな。
で、ココは何故固定になっているんだろう?気になるな。
例えばmb_substr関数に倣ってencoding値が可変になるように変更をカマしてみると。。。
OUTデータがエライ事になったっ!うーん。。。意外と簡単に対応できると思ったのにっ。タコさんパッチ不発。
意外と簡単な部分を見逃しているように思えるので、しばらく寝かしておいて改めて考えてみよっと。