iconv() が使えない環境で codeigniter 2.0.3 に発生する問題と回避方法

2012.12.10
2019.07.31
codeigniter で開発した多言語対応のWEBアプリケーションをお客様のテスト環境で動かした際に、開発環境では発生しないトラブルに悩まされました。UTF-8の文字列をハンドリングする部分が原因だったのですが、codeigniter の core を置き換える方法で解決することができました。

【現象】
お客様のサーバで動作させた場合にだけ、フォームへのPOST/GETした英数字以外のマルチバイト文字が消えてしまう。
マルチバイト文字だけ消えるというのが不思議で、英数字は問題なくPOST/GETできます。
【原因】
codeigniter の system 内で iconv() が使用されているが、
お客様のサーバ環境では iconv() が利用できない状態になっており、iconv() を通った文字列が全て消える状態だった。
【対処法】
system/core/Utf8.php 内で iconv() を使用している部分を置き換えた。
↓の部分。
function clean_string($str)
{
if ($this->_is_ascii($str) === FALSE)
{
//$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
global $CFG;
$str = $this->convert_to_utf8($str, $CFG->item('charset'));
}
return $str;
}
他にも convert_to_utf8() という関数でも iconv() を呼んでいる部分があり、あわせてmbstring を使うように修正しました。
事前にお客様のサーバの phpinfo() を確認して開発環境とあわせていたつもりでしたが、「iconv implementation」が「unknown」になっていることを見逃していました。UTF-8で codeigniter を使う場合は(ほとんどの場合がそうだと思いますが)、忘れずにチェックすることにします。
WEBチーム:堤
最新の記事
-
アイ・ディー・エーの社会貢献活動について
-
英文開示の翻訳を翻訳会社に依頼するときのポイントを解説
-
IR資料の英文開示に機械翻訳を活用する方法を東証のハンドブックから解説
-
東証の「英文開示ハンドブック」に見る、IR資料翻訳を進める3つのステップ
-
機械翻訳とプロ翻訳を融合した翻訳手法「ポストエディット」の活用方法を解説
よく読まれている記事
【実践ガイド】海外向け多言語サイトの作り方と制作費用を7つのトピックで解説
多言語サイトで機械翻訳を使うときの5つの注意点
Google公式情報に見る海外向けサイトのSEO、多言語サイトのSEOポイント
HTML直接翻訳で多言語サイト制作の手間と費用を大きく削減
多言語LP(ランディングページ)制作で押さえたい4つのポイント