ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Opened 13 years ago

Closed 13 years ago

Last modified 13 years ago

#1219 closed defect (fixed)

絵文字入れた日記の編集時に、編集対象が正常なデータではない

Reported by: kunitada Owned by: ogawa
Priority: blocker Milestone: OpenPNE2.10alpha2
Component: pne-admin Version:
Keywords: Cc:

Description

http://openpne.jp/?m=pc&a=page_h_diary_edit&target_c_diary_id=12919

とかで絵文字が入った日記を編集しようとすると、

↓とかでる。

<img src="http://openpne.jp/skin/default/img/emoji/i/i95.gif" alt="絵文字:i95"><img src="http://openpne.jp/skin/default/img/emoji/i/i96.gif" alt="絵文字:i96"><img src="http://openpne.jp/skin/default/img/emoji/i/i97.gif" alt="絵文字:i97"><img src="http://openpne.jp/skin/default/img/emoji/i/i98.gif" alt="絵文字:i98"><img src="http://openpne.jp/skin/default/img/emoji/i/i99.gif" alt="絵文字:i99"><img src="http://openpne.jp/skin/default/img/emoji/i/i1069.gif" alt="絵文字:i1069">

なんかDoCoMoの絵文字使われないなぁ

Change History (8)

comment:1 Changed 13 years ago by kunitada

Type: enhancementdefect

comment:2 Changed 13 years ago by kunitada

Milestone: OpenPNE2.10beta2OpenPNE2.10beta1

comment:3 Changed 13 years ago by ebihara

Owner: changed from nobody to ebihara
Status: newassigned

やります。

comment:4 Changed 13 years ago by ebihara

Owner: changed from ebihara to ogawa
Status: assignednew

絵文字の変換処理を見てみたところ、OpenPNE_Smartyクラスのext_display()内でコールしている $this->register_outputfilter('smarty_outputfilter_convert_emoji'); がすべての出力にかかってしまっているのが原因のようです。

当該部分のコードは以下です。

function ext_display($resource_name, $cache_id = null, $compile_id = null)
{
    $this->register_outputfilter('smarty_outputfilter_convert_emoji');
    // とりあえず携帯用にSJISのみ対応
    if ($this->output_charset == 'SJIS') {
        $this->register_outputfilter('smarty_outputfilter_convert_utf82sjis');
        $this->register_outputfilter('smarty_outputfilter_unescape_emoji');
        require_once 'OpenPNE/KtaiUA.php';
        $ktai = new OpenPNE_KtaiUA();
        if ($ktai->is_docomo()) {
            $this->register_outputfilter('smarty_outputfilter_add_font4docomo');
        }
    }
    $this->sendContentType();
    $this->ext_fetch($resource_name, $cache_id, $compile_id, true);
}

この現象に対応する方法としては以下のふたつがあると思うのですが、どうしましょうか。

  • 絵文字をすべて変換するのは携帯版のみ。PC版については、絵文字を変換するべき箇所すべてに対して、 Smarty の modifier などを使って都度変換することで対処
    • 変換漏れが生じる可能性がある(絵文字の表示ができなくなる箇所がでてくる可能性がある)
  • 基本的には絵文字をすべて変換する。PC版の絵文字を変換するべきでない箇所すべてに対しては、なんらかの手段を用いて、例外的に絵文字を変換させないことで対処する
    • 都度指定する方法であった場合、漏れが生じる可能性がある(現状と同じ現象が起こってしまう可能性がある/そのままでは絵文字を含んだ編集ができない(img要素が挿入されてしまった箇所を消去し、新規に %%[carrier] num%% 形式の絵文字コードを入力する必要がある))
    • 具体的にどういう風に対処するのか、ちょっと自分にはわかりませんでした

どう対応するべきか、ご判断ください。

comment:5 Changed 13 years ago by ebihara

Priority: criticalblocker

comment:6 Changed 13 years ago by ogawa

Status: newassigned

基本的にはすべての絵文字を変換するが、以下の2種類の箇所に対しては変換しないようにする。

  • textarea要素の内容
  • input要素のvalue属性の値

具体的には、smarty_outputfilter_convert_emoji()を改造し、あらかじめ絵文字変換対象外の文字列を退避した状態で絵文字変換処理をおこない、その後退避した文字列を元に戻すことにより実現できる。

comment:7 Changed 13 years ago by ogawa

Resolution: fixed
Status: assignedclosed

r4067 にて対応しました。

comment:8 Changed 13 years ago by ebihara

Milestone: OpenPNE2.10beta1OpenPNE2.10alpha2

alpha2リリースにつき、Milestoneを変更

Note: See TracTickets for help on using tickets.