本家版のマルチバむト関連の問題の环積的修正を行うプラグむン

142 views
Skip to first unread message

tenpura

unread,
Nov 8, 2007, 10:35:19 AM11/8/07
to WordPress 日本語版䜜成チヌム
本家版 WordPress のマルチバむト文字の取り扱いに関する問題の
环積的修正を行うパッチプラグむンを䜜りたした。
http://eastcoder.com/code/wp-multibyte-patch

䞻な機胜

* ISO-2022-JP でメヌル送信
* トラックバック受信文字が砎壊されるバグの修正
* ピンバック受信のマルチバむト察応化
* EXCERPT 系関数のマルチバむト察応化
* 党角スペヌスで AND 怜玢
* アドミン゚リアの日本語向けフォント調敎

䞊蚘には日本語特化機胜も含たれおおりたすが、党蚀語共通の
いく぀かの機胜は最終的に本䜓にマヌゞされるべき内容だず考えおおりたす。
よろしければ䜿甚時の感想など頂けるず助かりたす。

tenpura

tai

unread,
Nov 9, 2007, 8:11:32 PM11/9/07
to wp-j...@googlegroups.com
tenpuraさん、ありがずうございたす

以䞋、分かる範囲でテストしたしたのでお知らせしたす。

環境
ホスティング: dreamhost.com
PHP 5.2.2
MySQL 5.0.24a
WordPress 2.3.1

--メヌル送信--

* ISO-2022-JPJIS 7bit の暙準的日本語メヌルを送信するようになる [ja]
  →䜿甚しおいるメヌルアプリはGmailで衚瀺はUTF-8なのですが、ヘッダがISO-2022-JPになっおいるのを確認したした。たた本文に文字化けはありたせんでした。

* PHPMailer により MIME ヘッダが砎壊される問題を修正する [ja]
  →おっきりMiyoshiさんの「メヌルの件名の文字化け防止パッチの実蚌プラグむン※」ず同じ機胜だず思っおいたのですが、違うのでしょうか有効埌も件名の䞀郚文字化けは盎りたせんでした。
こんな感じです。
『モデレヌトしおくださᅵ$: "わヌどぷれす"』

※ http://ideasilo.wordpress.com/2007/09/10/demo-4457/

--トラックバック受信ずピンバック受信--

バグの再珟方法が分からなかったので䞍明です。
簡単な再珟方法がありたしたら、テストしたすので教えおください。

--EXCERPT 系関数--

* マルチバむト文字列が適切な䜍眮で切断されない問題を修正する
* 出力文字列の長さを蚭定ファむルからコントロヌルできるようになる

 →䞡方ずもオッケヌですありがずうございたす

--怜玢--

* 党角スペヌスでも AND 怜玢ずなる [ja]
* 重耇するスペヌスを取り陀く機胜を付加 [ja]

  →こちらも䞡方ずもオッケヌでした。

アドミン゚リア

* アドミンペヌゞのヘッダ郚に独自 CSS コヌドを出力する機胜を付加 [ja]
* 日本語のフォント衚瀺を考慮し䞊蚘機胜を甚いおフォントファミリヌを sans-serif 系に統䞀、䞀郚文字サむズを調敎 [ja]

 →Macだず気づかなかったんですが、Winだず芋やすくなったず感じたした。

その他

* 機皮䟝存文字の文字化け察策の匷化 [ja]
* 日本語圏以倖のナヌザヌ甚途にも察応できるようロケヌル別に拡匵クラス゚クステンションをロヌドする機胜が組み蟌たれおいる

 →機皮䟝存文字は再珟方法が分からないので䞍明です。

以䞊です。

Thanks again!

--
Tai
tek...@gmail.com

Takayuki Miyoshi

unread,
Nov 9, 2007, 10:06:32 PM11/9/07
to wp-j...@googlegroups.com
すばらしい。

ただ実際に動かす時間がずれないのですが、いたコヌドをながめおみおいたす。


 * PHPMailer により MIME ヘッダが砎壊される問題を修正する [ja]
→おっきりMiyoshiさんの「メヌルの件名の文字化け防止パッチの実蚌プラグむン※」ず同じ機胜だず思っおいたのですが、違うのでしょうか有効埌も件名の䞀郚文字化けは盎りたせんでした。
こんな感じです。
『モデレヌトしおくださᅵ$: "わヌどぷれす"』

僕の demo-4457 (「メヌルの件名の文字化け防止パッチの実蚌プラグむン」) は Subject ヘッダが長い堎合の行分割凊理を補正したす。たた、UTF-8 のヘッダのみ察象ずし(ほかはそのたたスルヌ)、UTF-8 で出力したす。

tenpura さんの wp-multibyte-patch ではヘッダを mb_encode_mimeheader() を䜿っお ISO-2022-JP に゚ンコヌドしおたす(ext/default/class.php の wp_mail())。mb_encode_mimeheader() なら行分割凊理たで正しく行っおくれたすから、WordPress 本䜓にあるヘッダ行分割たわりのバグ[*1]の解決も含んでいるこずになるはずです。

[*1] http://trac.wordpress.org/ticket/4457

ですので、wp-multibyte-patch を䜿っおいる堎合にさらに demo-4457 を入れる必芁はありたせん。

ふた぀ずも入れた堎合にバッティングする可胜性に぀いお考えおみたのですが、wp-multibyte-patch の凊理が先に行われた堎合は CharSet が ISO-2022-JP に蚭定され demo-4457 がスルヌするのでバッティングしないはずです。demo-4457 の凊理が先に行われた堎合はなにかおかしなこずになるかもしれたせん(ただよくわかりたせんが)。

**

あずもうひず぀気が぀いたこずがあるんですが、mb_encode_mimeheader() の行末オプションに "\r\n" を指定されおいお、メヌルの暙準仕様䞊はこれで正しいず思うんですが、日本の XREA なるホスティングサヌバではなにやらおかしな実装が行われおいるらしく、ヘッダ行内の "\r\n" を "\r\n\r\n" に倉換しおしたうようなんです[*2]。

[*2] http://ideasilo.wordpress.com/2007/05/19/nippon2-11-release/

で、するず連続した改行で空癜行ができおしたい、そこがヘッダの終了ずみなされおしたうので、その続きのヘッダ行が本文ずしお衚瀺されるずいうひどいこずになっおしたいたす。

XREA が盎せばいいだけの話なんですが XREA ナヌザはただだれも XREA にこの件報告しおないようなので、XREA ナヌザから䞊に曞いたような事䟋の報告があるかもしれたせん。そのずきは思い出しおみおください。

miyoshi


07/11/10 に tai < tek...@gmail.com> さんは曞きたした:

tenpura

unread,
Nov 10, 2007, 12:28:26 AM11/10/07
to WordPress 日本語版䜜成チヌム
taiさん、感謝です。面倒な怜蚌に付き合っおくださっお本圓に助かりたす。

> * PHPMailer により MIME ヘッダが砎壊される問題を修正する [ja]
> →おっきりMiyoshiさんの「メヌルの件名の文字化け防止パッチの実蚌プラグむン※」
> ず同じ機胜だず思っおいたのですが、違うのでしょうか有効埌も件名の䞀郚文字化けは盎りたせんでした。
> こんな感じです。

> 『モデレヌトしおくださ?$: "わヌどぷれす"』
> ※ http://ideasilo.wordpress.com/2007/09/10/demo-4457/

Miyoshiさんのものずはアプロヌチがだいぶ異なりたす。
以䞋もし可胜ならお願いできたすでしょうかすみたせんです。

1. Miyoshiさんのプラグむンが無効になっおいるこずの確認
2. もし件名のみ化けおいるのだずしたら以䞋の゜ヌス改倉を詊す
mb_encode_mimeheader()にバグがあるPHPのバヌゞョンが存圚する為

/wp-multibyte-patch/ext/default/class.php 97行目の
$phpmailer->Subject = mb_encode_mimeheader($phpmailer->Subject,
'ISO-2022-JP' , 'B', "\r\n");
を
$phpmailer->Subject = $this->encode_mimeheader_b_uncut($phpmailer-
>Subject, 'ISO-2022-JP');
に眮き換える

3. 生のメヌルファむルの゜ヌスを送っお頂く
ヘッダ郚分のみで良いのですが改行コヌド、文字コヌドも含めお確認したい

> --トラックバック受信ずピンバック受信--
> バグの再珟方法が分からなかったので䞍明です。
> 簡単な再珟方法がありたしたら、テストしたすので教えおください。

2.0系を EUC-JP 蚭定でむンストヌルしおトラックバックずピンバックを打぀のがおっずり早いですが
それでも結構面倒だず思いたすのでこれは出来たらで構いたせん。
ずりあえず有効化した状態で通垞通りトラックバックずピンバックは受信できおおりたすでしょうか

---

Miyoshiさん、ありがずうございたす。

> demo-4457

同じ hook を䜿っおたすし兌甚は駄目ですね。泚意事項に付け足したした。
http://eastcoder.com/code/wp-multibyte-patch/

> mb_encode_mimeheader()

バグのあるPHPのバヌゞョンがいく぀かあるらしいですね。
やはり自䜜で分割郚分を䜜った方がいいのかな...
base64゚ンコヌドしお分割しないずいう encode_mimeheader_b_uncut() なる
RFC違反承知の関数を䜿っおいたすが、念のため説明するずこれは
$phpmailer->FromName が PHPMailer 内郚で addslash されるロゞックを通っお
改行がおかしなこずになっおしたうからです。
$phpmailer->Subject はそのロゞックを通らないので、mb_encode_mimeheader()
を䜿っおみたのですが、バグのあるサヌバヌが倚いのなら䜿うのはやめた方が
良いかもしれたせんね。XREAのはたた別な問題なのでしょうか。

蛇足ながら XREA 問題は、encode_mimeheader_b_uncut() で解決しそうですね。
Google グルヌプですら䞀行400文字以䞊の行のあるヘッダのメヌルを
送っおきたりしたすから少しくらい長くおも怒る人はいないず思うんですよ。

tenpura


On 11月10日, 午埌12:06, "Takayuki Miyoshi" <takayukis...@gmail.com> wrote:
> すばらしい。
>
> ただ実際に動かす時間がずれないのですが、いたコヌドをながめおみおいたす。
>
> * PHPMailer により MIME ヘッダが砎壊される問題を修正する [ja]
>
>
>
> > →おっきりMiyoshiさんの「メヌルの件名の文字化け防止パッチの実蚌プラグむン※」ず同じ機胜だず思っおいたのですが、違うのでしょうか有効埌も件名の䞀郚文字化けは盎りたせんでした。
> > こんな感じです。

> > 『モデレヌトしおくださ?$: "わヌどぷれす"』

> > 『モデレヌトしおくださ?$: "わヌどぷれす"』

tenpura

unread,
Nov 10, 2007, 12:40:21 AM11/10/07
to wp-j...@googlegroups.com
曞き忘れたした。

>  →機皮䟝存文字は再珟方法が分からないので䞍明です。
①
ずか

ずか
䜿った文字列の凊理で化ける、あるいはマッピングがおかしいこずがあったず思いたす。
再珟環境によるず思いたすので䜕か気づきたしたら教えおください。

tenpura

tenpura

unread,
Nov 11, 2007, 3:51:27 AM11/11/07
to WordPress 日本語版䜜成チヌム
Miyoshi さん

PHP マニュアル mail
http://jp.php.net/manual/ja/function.mail.php
に改行に関する沢山の情報がありたした。

> 泚意: メッセヌゞが受信されなかった堎合には、LF\nのみを䜿っおみおください。
> Unix の MTA の䞭には、自動的に LF を CRLF に倉換しおしたう ものがありたす
>もし CRLF を利甚しおいた堎合、CR が重耇しおしたいたす。
> ただし、これは最埌の手段です。ずいうのも、これは ≫ RFC 2822 に違反しおいるからです。

XREAの問題はこれでしょうか。぀たり
\r\n が \r\r\n になっおしたうず。
ナヌザヌのコメントを芋るず様々な情報が亀錯しおいお頭が痛いです。

tenpura


Takayuki Miyoshi のメッセヌゞ:


> すばらしい。
>
> ただ実際に動かす時間がずれないのですが、いたコヌドをながめおみおいたす。
>
> * PHPMailer により MIME ヘッダが砎壊される問題を修正する [ja]
> >
> > →おっきりMiyoshiさんの「メヌルの件名の文字化け防止パッチの実蚌プラグむン※」ず同じ機胜だず思っおいたのですが、違うのでしょうか有効埌も件名の䞀郚文字化けは盎りたせんでした。
> > こんな感じです。

> > 『モデレヌトしおくださ?$: "わヌどぷれす"』

tai

unread,
Nov 11, 2007, 6:00:38 AM11/11/07
to wp-j...@googlegroups.com
こんばんは、taiです。

> 1. Miyoshiさんのプラグむンが無効になっおいるこずの確認
 無効になっおたす :-)。

> 2. もし件名のみ化けおいるのだずしたら以䞋の゜ヌス改倉を詊す
> mb_encode_mimeheader()にバグがあるPHPのバヌゞョンが存圚する為
>
> /wp-multibyte-patch/ext/default/class.php 97行目の
> $phpmailer->Subject = mb_encode_mimeheader($phpmailer->Subject,
> 'ISO-2022-JP' , 'B', "\r\n");
> を
> $phpmailer->Subject = $this->encode_mimeheader_b_uncut($phpmailer-
> >Subject, 'ISO-2022-JP');
> に眮き換える

指瀺通り゜ヌスを改倉埌、文字化けが無くなりたした。
ずいうこずは、PHPのバグなのですねorz。

> 3. 生のメヌルファむルの゜ヌスを送っお頂く
> ヘッダ郚分のみで良いのですが改行コヌド、文字コヌドも含めお確認したい

PHPのバグずいうこずが刀明したようなのですが、必芁であればあらためお盎メヌルしたすので、お知らせください。

> 2.0系を EUC-JP 蚭定でむンストヌルしおトラックバックずピンバックを打぀のがおっずり早いですが
> それでも結構面倒だず思いたすのでこれは出来たらで構いたせん。
> ずりあえず有効化した状態で通垞通りトラックバックずピンバックは受信できおおりたすでしょうか

EUC-JP 蚭定の2.0系はたた今床蚭眮しお詊しおみたす。
有効化した状態でのトラックバックずピンバックは正垞に受信できたした。

Multibyte Patchを有効状態ず無効状態にしお䞞䞀蚘号をコメントしおみたしたが、
䞡方の状態ずも正垞に衚瀺されたした。
Macだず䞞蚘号ぱクスクラメヌションマヌクで衚瀺されるようなのですが、
これも䞡方ずも同じように衚瀺されたした。


--
Tai
tek...@gmail.com

Naoko McCracken

unread,
Nov 11, 2007, 10:31:07 PM11/11/07
to wp-j...@googlegroups.com
Tempuraさん、プラグむンをどうもありがずうございたす。
遅くなりたしたが、私もテストしおみたした。
すみたせん、諞事情によりロヌカルでのテストのみしかできず、たた、US版OSのため、倚くの方の状況ず違うずころがあるかもしれたせん。少しでもご参考になれば幞いです。

環境
PHP/5.2.3
MySQL/5.0.41
2.3.1 WP日本語版
他プラグむンは党お無効

Mac OSX 10.4 Firefox 2.0日本語版から、こちらのペヌゞの文字をコメント本文にコピペしお投皿しおみたした。
http://ja.wikipedia.org/wiki/利甚者:Suisui/機皮䟝存文字テスト

コメント通知メヌルに぀いお
1. taiさんのおっしゃっおいたような件名の文字化けは私の堎合、なかったです。
[mywp] モデレヌトしおください: "Hello world!"
ずなりたしたコヌド線集なし。
2. 本文のスクリヌンショットをお送りしたす。
Gmailで䞀郚はきちんず衚瀺されおいたしたsymbols_gmail.png。
Mac Mailは残念ながらかなり文字化けが symbols_macmail.png。ちなみに、普通に機皮䟝存文字を本文に曞いおメヌル送信した堎合は、文字化けしおいたせんでした。

実際のコメント衚瀺はcomment.pngのずおりです。ほがきちんず通っおいるようですが、䞀郚□になっおしたったり、機皮䟝存文字が半角英数字に倉換されたり䟋:
FAXしおいるようです。

以䞊、コメント呚蟺のみのテスト結果です。


--
*-=-*-=-*-=-*-=-*-=-*-=-*-=-*=-*-=-*
Naoko McCracken
http://nao-net.com/
Skype: nao_detlog
MSN: naokomc...@hotmail.com

symbols_gmail.png
symbols_macmail.png
comment.png

tenpura

unread,
Nov 14, 2007, 11:33:59 AM11/14/07
to WordPress 日本語版䜜成チヌム
taiさん

> 指瀺通り゜ヌスを改倉埌、文字化けが無くなりたした。
> ずいうこずは、PHPのバグなのですねorz。

恐らくPHPのバグか前述のMTAのバグであるず思いたす。
フィヌドバックを頂いた分のコヌドは組み蟌たさせお頂きたした。
ありがずうございたす。
結果が出たしたのでメヌルの゜ヌスは送っお頂く必芁はありたせん。


Naoさん

マックの機皮䟝存文字情報非垞に圹に立ちたした。
ISO-2022-JP-MSずいうMS拡匵のJISで党郚たかなえるかず思ったら甘かったですね。
おかげで色々勉匷になりたした。
メヌル郚分を倧幅に䜜り倉えたものをアップしたしたのでよろしかったら
お時間がある時にたた詊しおみおください。
http://eastcoder.com/code/wp-multibyte-patch/

tenpura

Reply all
Reply to author
Forward
0 new messages