IE11でファイルが文字化けする。

IE11でダウンロード時に文字化けするという報告がありました。

IE11でのファイルが文字化けするという報告は、検索すればいっぱい出てきて、

IEのブラウザ側で互換表示をしてやると治るという解決方法を進めているサイトがたくさんあります。

しかし、今回は、「互換表示をするという方法を使わずにサイト側でなんとかできないか」というご依頼でした。

 

簡単に「METAタグに互換を仕込めばいっかー」と安請け合いしたのですが、そうはいかなかったです。

レイアウトが崩れる時などにIEの互換表示をサイト側(メタタグ)で制御する方法

そもそも、その環境はXOOPSのfckeditorを使ってファイルリンクを作っていて、transfer.phpを介してファイルダウンロードさせています。

そこでの文字コードの問題かな。だけど、IE11の互換モードを使ってたら、文字化けは解消されるし……

といろいろと調べておりましたが、

IE11でファイルをダウンロードすると文字化けが発生する

が近いのだと思います。

 

前に、XOOPSのSPAWエディターがらみでいろいろ調べていたときに(参照:SPAWエディターが表示しなくなったら)、そんな話があったなぁ。

/common/fckeditor/editor/filemanager/connectors/php/transfer.php を見ます。

L26あたりに

 
if( substr( $GLOBALS['xoopsConfig']['language'] , 0 , 2 ) == 'ja' && strstr( $ua , 'MSIE' ) && ! strstr( $ua , 'Opera' ) ) {
 

とあります。これを

 
if( substr( $GLOBALS['xoopsConfig']['language'] , 0 , 2 ) == 'ja' && (strstr( $ua , 'MSIE' ) || strstr( $ua , 'Trident' )) && ! strstr( $ua , 'Opera' ) ) {
 

に変更します。

これでうまく行きます。

SPAWエディターが表示しなくなったら

SPAWエディター使用のXOOPSはだいぶ昔のものだし、セキュリティ的に使っていること自体が問題かもしれませんが、でも、例外もありますので……。

SPAWエディターが、Googlechromeなどの新しいブラウザや、IEのバージョンアップで表示されなくなりまして、まぁ、そういうものかなと、利用する必要がある場合はIEの互換表示でごまかして利用していたのですが、なんかのきっかけでそれに関する記事を発見。

古いCMS環境を最新ブラウザで使うための改造

貴重な資料をありがとうございます。

ということで、ブラウザ判別がひっかかっていたらしいです。そうですね、SPAWの時代にGooglechromeはなかった……。IEのバージョンアップでエディターが表示されなくなったとき、バージョンの判別のスクリプトをいじったりしたことがあったので、それでピンとくるべきだったなぁ……。

ということで、

「class/util.class.php」の「function checkBrowser()」に//▼▼ここから追加▼▼から//▲▲ここまで▲▲を追加。

  function checkBrowser()
  {
    $browser = $_SERVER['HTTP_USER_AGENT'];
    // check if msie
    if (eregi("MSIE[^;]*",$browser,$msie))
    {
      // get version 
      if (eregi("[0-9]+\.[0-9]+",$msie[0],$version))
      {
        // check version
        if ((float)$version[0]>=5.5)
        {
          // finally check if it's not opera impersonating ie
          if (!eregi("opera",$browser))
          {
            return true;
          }
        }
      }
    }
    elseif (ereg("Gecko/([0-9]*)",$browser,$build))
    {
      // build date of version 1.3 is 20030312
      if ($build[1] > "20030312")
        return true;
      else
        return false;
    }
    //▼▼ここから追加▼▼
    elseif (ereg("Chrome",$browser))
	{
		return true;
	}
	elseif (ereg("Firefox",$browser))
	{
		return true;
	}
	elseif (ereg("Safari",$browser))
	{
		return true;
	}
	elseif (ereg("Trident",$browser))
	{
		return true;
	}
	//▲▲ここまで▲▲
    return false;
  }
 

まぁでもそもそもあんまり使わない方がいいとは思うんですが……。
久しぶりにXOOPS関係の記事を書きました。

XOOPSでFCKeditorからckeditorへ

InternetExproler10が世に出てから、お客様からよく「エディターが無くなりました」というお問い合わせをいただきました。
FCKEditorがIE10という「10」というのを想定して作られていなかったのと、跡継ぎエディターのCKEditorが出てきていたのとあって、対応されたものがなく、また、XOOPSで使用していたFCKEditorはXOOPS用にうまいこと動くように改造していただいていたものでした。

FCKEditorをIE10以降の環境でも使えるようにという技はいろいろとあったし、私もこのブログで紹介していたけれど、結局思ったような動きをせず、IEの互換モードを利用して、管理画面だけ強制的にIE8にすることで、この問題を避けてきました。

しかし、来年あたりに出るだろうIE12からは、この互換モードもなくなるだろうという噂を聞き、やはりFCKeditorからCKeditorにしなくてはならないかぁ……といろいろ調べていたところ、「CKEditor4」というXOOPS用に変更されたモジュールがあることを知り(ありがとうございます!)、サーバーブラウザにもXelfinderというものを提供していただいているということを知って(ありがとうございます)、ここ数日その変更をいろいろと試していたところです。

CKEditor4」は、リンク先のページによると動作確認されているXOOPSのバージョンが、XOOPS CUBE Legacy2.2.0からの方がよいみたい(1.7.2で試していたけど、うまくいかなかった)

ので、

1.XOOPS CUBE Legacy 2.2.0以上にバージョンアップする(どうせバージョンアップするならなるべく最新に)

2.CKEditor4をインストール

3.eXlfinderをインストール

という流れで。

まず、

1.XOOPS CUBE Legacy 2.2.0以上にバージョンアップする(どうせバージョンアップするならなるべく最新に)

以下のページを参考にアップデート

http://sourceforge.net/apps/mediawiki/xoopscube/index.php?title=Upgrade22;ja

なんで、このアップデート、今頃まで躊躇していたかというと、管理画面のデザインがかわるからだったりします。
普段操作に不慣れなお客様だと、ボタンの色一つ変わるだけで、「あれ?」と思う方もいらっしゃるので……。
なるべく管理画面とか変わってほしくないなぁ……なんて思ったりしますが、この際、デザインの変更点もちゃんと説明することにします。

2.CKEditor4をインストール

インストールするだけで、picoでエディターが動く的な説明をどこかで読みましたが、私の場合インストールするだけではだめでした。

テンプレートの「xx_main_content_form.html」より

<{$body_wysiwyg}>  を<{ck4dhtmltarea name=body value=$content.body editor=html}>  に変更します。

 3.eXlfinderをインストール

特に難しいことはありません。インストールすれば、ckeditor4のサーバブラウザとして使うことができます。

4.bulletinが2.04だったら2.2にアップしておく必要があります。

取りあえず以上……。

XOOPSのモジュールAltsysがインストールできない

XOOPS Cube Legacy 2.2をインストール後、Altsysやpicoをインストールしようとすると、「コールバック ‘xoops_module_install_altsys’ を実行することができませんでした」というエラーが出てインストールできない。

ちなみにサーバの環境は

PHPバージョン : 5.2.17
MySQLのバージョン : 5.5.28-log

以下の記事を参考にしました。

http://xoopscube.jp/forum/6771

しかし上記の記事の置換では、なぜかうまくいかなかったため、該当するモジュールのソースの

「 TYPE=MyISAM」を検索して、「ENGINE=MyISAM」に置換したファイルをアップして、インストール完了です。

【XOOPS】IE10でFCKeditorが動かない

随分前にも同じような投稿をしたかもしれませんが、「互換」を使いたくなくて、その方法は触れてなかったのですが、いよいよ面倒になったので「互換」に頼ることにしました。

テーマファイルのheaderに以下を入れます。


<{if $xoops_isadmin}>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
<{/if}>

XOOPSの引っ越しで文字化け

新しいサーバーに昔のバージョンのXOOPSをインストール。
(※新しいバージョンのXOOPSにしたほうがいいことはわかってますが、諸事情によりそのまま)
mysqlはujs_japaneseとかにしても、文字化けします。

XOOPS/MySQL5.0.xでの文字化け対策

を参考にさせていただきました。ありがとうございます。

class/database/mysqldatabase.phpというファイル

if($selectdb != false){
           if (!mysql_select_db(XOOPS_DB_NAME)) {
               $this->logger->addQuery('', $this->error(), $this->errno());
               return false;
           }
       }

のあとに

mysql_query("SET NAMES ujis", $this->conn);

【訂正】Contactモジュールから送信されたメールの件名と差出人が文字化けする

(2011.7.19に訂正)
Contactモジュールから送信されたメールの件名と差出人が文字化けする件、いろいろとテストをしているうちに分かってきたのは以下の現象。

おきている現象
・IEで投稿すると件名と差出人が正常。
・ Firefoxで投稿すると件名と差出人が文字化け。
・GoogleChromeで投稿すると件名と差出人が文字化け。
・IEで再度投稿すと、ときどき文字化け。

サーバの条件
PHP5.1.6
mysql 5.0.22

おきている現象を見ていて、メーラーのせいではないですねー。ということで、いろいろと検索していたら以下のような投稿を発見しました。

XCL2.1.7から届くメールのsubjectが途中から文字化け

このページの対策で
html/language/(japanese|ja_utf8)/xoopsmailerlocal.php にある
$encoded = mb_encode_mimeheader($encoded, “ISO-2022-JP”, “B”, “\n”);

$encoded = mb_encode_mimeheader($encoded, “ISO-2022-JP”, “B”, “\r\n”);

に変更。で、文字化けがなくなりました。
php-5.1.6 のmail()関数が、\r\n でないダメという仕様に(本来ならそれが正しい?)なったからではないかということが書いてありました。

調べてみましたが、そのソースのようなものは見つけることができませんでしたが、\r\n でないダメということは肝に銘じておくことにします。

 

(以下、2011/7/15の投稿文章)
ご利用のメーラーは「OutlookExpress」。ちなみに、「Outlook」でテストすると文字化け再現せずに困っております。

とりあえず関連しそうなページをメモメモ。

 

OUTLOOKの件名欄が文字化けしてしまいます。
http://okwave.jp/qa/q71015.html

メール送信時のSubject文字化け
http://xoopscube.jp/forum/750

とりあえず、OutlookExpressの設定を見直して、再度テストする予定。
ページを忘れそうなので、メモしました。

XOOPSログイン後の「ログイン処理中です」が文字化け

「ログイン処理中です」とか「テンプレート更新中です」とか、管理画面処理をするときに一瞬出るあの画面が文字化けしていました。

対応は下記URLを参考にしました。

ツꀀXOOPSのログインログアウト時にだけ表示される文字化け画面を直す。(@パソコン手探り

modules/legacy/kernel/legacy_controller.class.php の 

function executeRedirect($url, $time = 1, $message = null, $addRedirect = true){
global $xoopsConfig, $xoopsRequestUri;

の下と

include/functions.php の

function redirect_header($url, $time = 3, $message = ”, $addredirect = true){
global $xoopsConfig, $xoopsRequestUri;

の下に

header("Content-Type: text/html; charset="._CHARSET);ツꀀツꀀ

を挿入です。

これで直りました。
ちなみにサーバは、ファーストサーバのエンタープライズ 昔の。
私的には何かといまひとつ。

picoのメニューの表示の仕方 その2

picoのメニューの表示の仕方 その1の続きです。
カテゴリーの階層

カテゴリー1
│  ├記事1
│  ├記事2
│  └記事3
カテゴリー2
│ │└記事4
│ └カテゴリー2-a
│    ├記事ア
│    └記事イ
カテゴリー3
   ├記事5
   ├記事6
   └記事7

という階層があったとする。このとき、カテゴリー2-aは、カテゴリー2のサブカテゴリーです。

このときに、そのカテゴリーの記事が表示されているときだけ記事リストを表示させたい。つまり、カテゴリー1の記事1を読んでいるときには、

カテゴリー1
│  ├記事1
│  ├記事2
│  └記事3
カテゴリー2
カテゴリー3

カテゴリー2内の記事4を読んでいるときは、

カテゴリー1
カテゴリー2
│ │└記事4
│ └カテゴリー2-a
カテゴリー3

となるようにしたいです。

Continue reading

XOOPS CUBE 2.1.7 → 2.1.8 の差分ファイル

差分ファイルを調べたかったので「WinMerge」で調べてみました。
ファイルの一番下に改行が入ってたりするのって、仕様?
ファイルのコメントのところのアドレス変更が一番多かったです。

2.1.8追加されたファイル
extras\extra_images\portuguese\uploads\uploadsフォルダ
extras\extra_languages\pt_utf8\html\modules\user\language\pt_utf8\admin_extra.php
html\modules\user\language\portuguese\admin_extra.php
html\install\language\portuguese\charset_mysql.php
extras\extra_languages\pt_utf8\html\modules\legacy\language\index.html
extras\extra_languages\pt_utf8\html\modules\legacyRender\language\index.html
extras\extra_languages\pt_utf8\html\modules\pm\language\index.html
extras\extra_languages\pt_utf8\html\modules\stdCache\language\index.html
html\language\japanese\phpmailer.lang-ja.php

———————————————————–
コードの変更
extras\extra_languages\pt_utf8\html\modules\legacy\language\pt_utf8\help\abc_1st.html
 (L58 URLがhttp://xoopscube.orgからhttp://xoopscube.sourceforge.net/など)

html\modules\legacy\class\AbstractFilterForm.class.php
 (L70あたりのfunction getCriteriaの中)

html\modules\legacyRender\class\AbstractFilterForm.class.php
 (L62あたりのfunction getCriteriaの中)

html\modules\user\class\AbstractFilterForm.class.php
 (L60あたりのfunction getCriteriaの中)

html\modules\user\forms\AbstractUserEditForm.class.php
 (L46あたりツꀀ$regex=”/[\000-\040]/”; → $regex='[\000-\040\177]’;)

html\modules\legacy\kernel\Legacy_TextFilter.class.php
 (L363あたりツꀀpreg_match(“/[\\0-\\31]/” → preg_match(‘/[\x0-\x1f\x7f]/’)

extras\extra_languages\pt_utf8\html\modules\user\language\pt_utf8\mail_template\activated.tpl
 (L141以降)

extras\extra_languages\pt_utf8\html\modules\user\language\pt_utf8\mail_template\activated.tpl
 (L43以降 ただし空白行が2.1.7に入っていたのを削除しただけのようです)

html\modules\user\language\portuguese\mail_template\activated.tpl
 (L141以降)

extras\extra_languages\pt_utf8\html\language\pt_utf8\mail_template\default_notify.tpl
html\language\portuguese\mail_template\default_notify.tpl
 (テンプレートの内容修正)

html\include\functions.php
 (処理がたくさん増やされています。if文とか)

extras\extra_languages\ja_utf8\html\modules\legacy\language\ja_utf8\global.php
 (L186 mb_language( ‘ja’ ) ;のコメントアウト)

html\modules\legacy\language\portuguese\global.php
 (情報部分と、後半のLEGACY_MAIL_CHARなどの設定の変更)

html\modules\legacy\blocks\legacy_comments.php
 (L180あたりにif (!defined(“OH_MY_GOD_HELP_ME”)) {error_reporting(0);}追加、_setupDebuggerからツꀀerror_reporting(0);削除<htmlが出る前に、header(‘Content-Type:text/html; charset=’._CHARSET);追加))
 

html\modules\legacy\admin\class\Legacy_Updater.class.php
 (L97あたりの$sql = ‘ALTER TABLE `’ . $table . ‘` DROP INDEX `groupid_uid`’;下に4行ほど追加 L149を$result = $xoopsDB->query($sql); → $result = $db->query($sql);)

html\modules\legacy\actions\MiscSslloginAction.class.php
 (L25からのfunction executeViewIndexの$root =& $controller->mRoot;の下に6行ほど処理追加)

html\class\module.textsanitizer.php
 (L195あたりのfunction checkUrlString if (preg_match(“/[\\0-\\31]/”, $text)) → if (preg_match(‘/[\x0-\x1f\x7f]/’, $text)) {)

html\modules\legacy\admin\actions\PreferenceEditAction.class.php
 (L347 function executeViewSuccessと その下のfunction executeViewCancel の処理変更)

extras\XUpgrade\admin\class\UpgradeProcessor.class.php
 (L306の$log->add が $this->mLog->)

html\include\version.php
html\modules\legacy\xoops_version.php
html\modules\legacyRender\xoops_version.php
html\modules\pm\xoops_version.php
html\modules\stdCache\xoops_version.php
html\modules\user\xoops_version.php
 (バージョン番号の変更)

Continue reading