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チーム:堤
最新の記事
-
idaで実装したウェブアクセシビリティ対応例3つ
-
【制作者インタビュー】UI設計とアクセシビリティ対応のポイント:阪神甲子園球場チケット販売サイトリニューアル
-
アクセシビリティ評価ツール miCheckerの使い方
-
多言語LP(ランディングページ)制作で押さえたい4つのポイント
-
海外での特許取得に欠かせない特許翻訳の品質とは?
よく読まれている記事
【実践ガイド】海外向け多言語サイトの作り方・制作費用を7つのトピックで解説
台湾と香港の言葉はどのくらい違うの?
Google公式情報に見る海外向けサイトのSEO、多言語サイトのSEOポイント
HTML直接翻訳で多言語サイト制作の手間と費用を大きく削減
海外向け多言語ウェブサイトのCMSを選ぶ7+1のポイント