ホーム > フォーラム > 開発 > コア開発 > <br />が表示されてしまう

<br />が表示されてしまう
投稿者: kilica | 投稿日時: 2007-1-25 0:05 | 閲覧: 6906回
kilica
RCのバグ報告です

ユーザ情報(userinfo.php)の「署名」で,改行があると
がそのまま表示されてしまいます(β4とRCで発生。α4は正常。その間は不明)。

ユーザ情報の「基本情報」の「その他」の欄は正常に改行されて表示されます。

あと,Cubson で作ったモジュールで改行を含む値を view で表示したときも同じく
が表示されてしまうのですが,こちらは僕の作り方が悪いのかも知れません(でもやはりαの頃は正常に改行されていたのでバグではないかと・・・)。

コメント(4)

新しいものから | 古いものから | ネスト表示 | RSS feed
Re: <br />が表示されてしまう 
投稿者: minahito | 投稿日時: 2007-1-25 9:33
minahito
kilica さんありがとうございました! (^^)/

引用:
あと,Cubson で作ったモジュールで改行を含む値を view で表示したときも同じく
が表示されてしまうのですが,こちらは僕の作り方が悪いのかも知れません(でもやはりαの頃は正常に改行されていたのでバグではないかと・・・)。


これは DTYPE_STRING が改行なしのコードを前提としているため、種々のエンコード条件が変わってしまうことが原因ではないかと思います。 getShow 内で抽出してやればよさそうですが、

getShow($name)
{
  if ($name == "署名") {
     return ...
  }
  else {
     return parent::getShow($name);
  }
}

フォーム入力欄といい、これだけでは済みそうにないですね。。ちょっとなんかあっさりいく方法を考えないと...
Re: <br />が表示されてしまう 
投稿者: nobunobu | 投稿日時: 2007-1-25 13:49
nobunobu

これcubsonというよりは、
もともとのtextSanitizerのつくりのいびつなところの弊害が、
TextFilterに置き換えたときに発症したのかもしれません。
User_UserInfoAction::executeViewSuccess()内に、

$myts =& MyTextSanitizer::getInstance();
$userSignature = $myts->makeTareaData4Show($this->mObject->get('user_sig'), 0, 1, 1);
$render->setAttribute('user_signature', $userSignature);

って部分がありますが・・・
このmakeTareaData4Showって、X2時代から、
function &makeTareaData4Show(&$text, $html=1, $smiley=1, $xcode=1)
ってことで第一パラメータは参照渡しで、戻り値に置き換わってしまうという気持ち悪い入出力仕様になっています。
これが、呼び出しの連鎖の中で発症していなかったのが、
今回はこの部分でどこかが置き換わったとしか考えられません。
この'user_signature'ってAttributeは使っていなさそうだったので3行を削除すると、あら不思議きちんと表示できました。

この3行があることによってテンプレート内でのgetShow前にmObjectの内容が書き換わっていたようです。
(書き変わっている事実は、別途getShow内でECHO挟み込んで確認しました)

# 参照って動作が良くわからんときあるからなぁ・・・・

対応に関しては少々考えさせてください。

# TextSanitizerの参照パラメータ使っているモジュールってあるんですかね?
# なければ、やめたいんですけど・・・
Re: <br />が表示されてしまう 
投稿者: nobunobu | 投稿日時: 2007-1-25 22:37
nobunobu
引用:

nobunobuさんは書きました:


$myts =& MyTextSanitizer::getInstance();
$userSignature = $myts->makeTareaData4Show($this->mObject->get('user_sig'), 0, 1, 1);
$render->setAttribute('user_signature', $userSignature);

って部分がありますが・・・

とりあえずこの部分でMyTextSanitizerを使用せずに、
$userSignature = $this->mObject->getShow('user_sig');

と変更することによって、この部分の不具合は回避することにします。
MyTextSanitizerでの参照パラメータに関してはさらに検討します。
Re: <br />が表示されてしまう 
投稿者: minahito | 投稿日時: 2007-1-28 12:24
minahito
引用:
nobunobuさんは書きました:

これcubsonというよりは、
もともとのtextSanitizerのつくりのいびつなところの弊害が、
TextFilterに置き換えたときに発症したのかもしれません。


ぐはぁそうでしたか...よく考えたら署名は bb text で、文字制限のために DTYPE_STRING を使っているパターンでしたね。これ SimpleObject の場合は getShow を...というよりは DTYPE_TEXT にしてしまって set 側をオーバーライドすればいいことですね。。(アクションフォームもあるし)

引用:
# TextSanitizerの参照パラメータ使っているモジュールってあるんですかね?
# なければ、やめたいんですけど・・・


ないとは思うんですが、僕もここ微妙だなと思っているのが、文字列操作関数に限定すると、渡したもの自体が書き換わる動作はメジャーな部類に入ると思うので、そういう感覚で関数を使って現在動いているモジュールがないとは言い切れない気がします。

これ .org 側では修正したんでしたっけ? であれば国内に関しては大丈夫というか、頼み込んで修正してもらうという方法がとれそうな気がしますが...

    投票(0)

    新しいものから | 古いものから | RSS feed
     

    概要 | ダウンロード | ニュース | フォーラム | 開発情報 | ツール | テーマ | モジュール
    お問い合わせ | プライバシーポリシー
    Copyright © 2001-2012 XOOPS Cube日本サイト