携帯絵文字変換スクリプトで20個目以降がエラーに
ただいま1つのソースで3キャリアに対応した携帯サイトを作成しております。
絵文字を表示させるために、HTMLタグボードさんで配布されている「携帯絵文字変換スクリプト 3キャリア対応」 http://www.dspt.net/tools/emoji/ (フリーソフト/改変・改造自由)を組み込んでみたのですが、
下のようなエラーになってしまいました。
絵文字が19個目までは正常に表示されて、20個目以降がエラーになってしまいます。
(テストの為にHTMLファイルの<BODY></BODY>内に同じ絵文字だけを20個以上並べたところ、絵文字の種類にかかわらず20個目から[an error occurred while processing this directive]となってしまいます。)
HTMLファイルをPCから開いても携帯から開いても上記と同じ現象が起こるので、もしかしたら携帯絵文字変換スクリプトの中に表示数の上限に関係した記述があるのではと思ったのですが、php初心者のためスクリプトを見ても原因がわかりませんでした。
もし原因の分かる方がいらっしゃったら、ぜひ教えていただければと思います。
どうぞよろしくお願いいたします。
■絵文字変換スクリプト本体 trans.php
<?php
//┌─────────────────────────────────
//│ [ EMOJI TRANS Ver2.3]
//│ trans.php - 2008/06/15
//│ Copyright (C) DSPT.NET
//│ webmaster@dspt.net
//│ http://www.dspt.net/
//└─────────────────────────────────
/********************** 初期設定 ***********************/
//絵文字変換表
$emoji_data = "emojix.csv";
//入力値取得
$num = $_GET["emoji"];
//PC用絵文字格納フォルダ
$img_dir = "/php/emoji/images/";
//ドコモ→au絵文字自動変換利用(on:1 off:0)
$ie = "1";
/********************** 以下からは改変しないほうが無難 ***********************/
//変換表を配列に格納
$emoji_array = array();
$emoji_array[] = "";
$contents = @file($emoji_data);
foreach($contents as $line){
$line = rtrim( $line );
$emoji_array[] = explode(",", $line);
}
function encode($data) {
$data = mb_convert_encoding($data, "SJIS", "auto");
return $data;
}
//携帯UA取得
$agent = $_SERVER["HTTP_USER_AGENT"];
//携帯端末のユーザエージェントを判定
function mobile($data){
if(preg_match("/^DoCoMo\/[12]\.0/i", $data))
{
return "i";// i-mode
}
elseif(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]980|SoftBank)\//i", $data))
{
return "s";// softbank
}
elseif(preg_match("/^KDDI\-/i", $data) || preg_match("/UP\.Browser/i", $data))
{
return "e";// ezweb
}
elseif(preg_match("/^PDXGW/i", $data) || preg_match("/(DDIPOCKET|WILLCOM);/i", $data))
{
return "w";// willcom
}
elseif(preg_match("/^L\-mode/i", $data))
{
return "l";// l-mode
}
else {
return "p";// pc
}
}
//携帯キャリアに合わせて絵文字を出力
function emoji($data) {
global $agent,$emoji_array,$img_dir,$ie;
if(preg_match("/[0-9]{1,3}/", $data) && is_numeric($data) && 0 < $data && $data < 253) {
switch(mobile($agent)){
case "i";
$put = $emoji_array[$data][1];
break;
case "e";
if (preg_match("/[^0-9]/", $emoji_array[$data][2])) {
$put = $emoji_array[$data][2];
} elseif ($ie > 0) {
$put = $emoji_array[$data][1]; // Display such the icons that ezserver transformed as docomo i-emoji.
} else {
$put = "<img localsrc=\"".$emoji_array[$data][2]."\" />";
}
break;
case "s";
if (preg_match("/^[A-Z]{1}?/", $emoji_array[$data][3])) {
$put = "\x1B\$".encode($emoji_array[$data][3])."\x0F";
} else {
$put = encode($emoji_array[$data][3]);
}
break;
case "p";
$put = "<img src=\"".$img_dir.$emoji_array[$data][0].".gif\" width=\"12\" height=\"12\" border=\"0\" alt=\"\" />";
break;
}
echo $put;
}
else {
echo "[Error!]\n";
}
}
//処理
emoji($num);
?>