トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BBS-サポート掲示板/1009

ページの作成や編集にはユーザ登録が必要です。

 丸付き数字が文字化けします - 風カイ (2021年07月06日 09時54分34秒)

3.6.4から3.6.5にバージョンアップ後、丸付き数字が文字化けするようになりました。こちらは、Windows + IIS +Perl5.8です。このサイトでも発生しています。SandBoxコメントに「2021年07月06日 09時46分14秒」に丸数字の1を投稿しました。?で表示されていますが、ソースで表示すると丸数字の1で見えています。どうすれば、丸付き数字を文字化けしないようにできるのでしょうか。

  • 丸数字は機種依存文字だねぇ。本システムはEUCコードだから(UTF-8対応じゃない)表示は無理だね。 - 名無しさん (2021年07月06日 10時50分40秒)
  • 丸数字はダメと言ったって一向に聞いてもらえないですよね・・・。私も前に同症状で困りましたが、 Util.pmの $retstr = Jcode->new($retstr)->euc; を#コメントアウトしたような気が・・・数か所あったかもしれませんがURLの場合リンク切れになる可能性があります。お試しください。 - as (2021年07月06日 12時44分18秒)
  • 3.6.4同様に表示できるようになりました。38行目、103行目をコメントにしました。これで様子を見ます。ありがとうございました。 - 風カイ (2021年07月06日 16時50分31秒)
  • 確かにEUCに対応できない文字は使用できなくなっていますからねぇ・・・Util.pmの該当箇所を変更した場合、他国の文字でスパム投稿された場合にFSWiki上から削除できないファイルが作成されることがありますのでご注意ください。 - KG (2021年07月08日 09時52分06秒)
  • ちなみに、以前作成していたfswiki-v4(utf8版)で試したら当然丸数字は使用できました。:-) - KG (2021年07月08日 09時54分10秒)
  • 少し調べてみたら、JcodeはEncodeのラッパーになっているのですが、decode('EUC-JP',$str)は丸付き数字を取り扱えるのですが、何故かラッパーのJcodeからのdecode呼出しだと?になってしまうという状況でした。 - 風カイ (2021年07月08日 13時55分24秒)
  • 丸数字は保存はちゃんとされていますし、編集時のtextareaには丸数字で表示されますね・・・ - KG (2021年07月08日 14時45分44秒)
  • ? - 名無しさん (2021年07月18日 11時56分39秒)
  • Wikiページ保存する前に、EUC以外の文字を HTML::Entities::encode_entities() で数値文字参照に変換しておく、という手はあるようです。 - 名無しさん (2021年07月18日 12時07分34秒)
    • ↑「数値文字参照に変換」は、実質的には $retstr = Jcode->new($retstr)->euc; をコメントアウトとほとんど同じですね。失礼しました。 - 名無しさん (2021年07月18日 15時05分26秒)
  • 入力された新規作成ページ名から、ページ本文を保存する Wiki ソースファイル名 *.wiki を生成する際に使われるのは Util.pm 38行目(Util::url_encode())のみで、Util.pm 103行目(Util::escapeHTML()) は使われていないので、「他国の文字(を使ったページ名)でスパム投稿された場合にFSWiki上から削除できない(Wikiソース)ファイルが作成されることを防ぐ」ということだけが目的であれば、Util.pm 103行目の $retstr = Jcode->new($retstr)->euc; は不要な気がします。Util::escapeHTML() は、基本的にページ本文の表示時に使われると思いますので、Util::escapeHTML() 内の Util.pm 103行目で $retstr = Jcode->new($retstr)->euc; で制限をかける目的は何でしょうか? - 名無しさん (2021年07月18日 15時11分14秒)
  • また、ページ名に使用できる文字を制限するのであれば、Util::url_encode() の中ではなく、Util::check_pagename() で制限をかけた方が良いような気がします。何故なら、現状の Util::url_encode() での制限は、拒否文字が文字化けするもののページを作成できてしまいますが、Util::check_pagename() で引っかかればページが作成されないからです。 - 名無しさん (2021年07月18日 15時26分42秒)
  • Util.pmへの該当修正に関しては過去のXSS発生を防ぐ目的となっています。参考 - KG (2021年07月28日 13時29分25秒)
  • とりあえずの解決策としては escapeHTML 変換処理を下記のようにすると良いかも - KG (2021年07月28日 18時15分56秒)
$retstr = Jcode->new($retstr)->euc;
↓
$retstr = Unicode::Japanese->new($retstr,'auto')->euc;
  • Unicode::Japaneseはここからダウンロードしてください。なお、当然のことながら Util.pm には use Unicode::Japanese; を追加してください。 - KG (2021年07月28日 18時18分54秒)
  • 注意点として、Japanese.pm にはバイナリデータが含まれていますのでアップロード時にはバイナリーで行ってください。 - KG (2021年07月28日 18時19分52秒)
  • 上記変更によりEUC-JPで対応していない文字や第三水準漢字等も表示されるようになります。ちなみに、Jcodeでは別の文字に変換されてしまったのですけどね・・・ - KG (2021年07月28日 18時23分29秒)
お名前: コメント:

最終更新時間:2021年07月28日 18時23分29秒