携帯絵文字変換スクリプトで20個目以降がエラーに

このQ&Aのポイント
  • 携帯サイト作成中に携帯絵文字変換スクリプトを組み込んだところ、20個目以降の絵文字がエラーになる現象が発生
  • PCでも携帯でも同じ現象が発生し、表示数の上限に関係する可能性を疑っている
  • スクリプトを見ても原因がわからず、分かる方がいれば教えてほしい
回答を見る
  • ベストアンサー

携帯絵文字変換スクリプトで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); ?>

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

phpスクリプト側には制限はありません。 SSIで読み込んでいますので、(サーバ側で)SSIからphpスクリプトを起動する数に制限がかかっている可能性があります。 回避するとすれば、SSIでの読み込みをやめてshtml→phpにして直接埋め込むくらいでしょうか。手法は以前書いたものが下記にありますので参考にしてください。 http://sb.xrea.com/showthread.php?t=14639

hanamizukii
質問者

お礼

アドバイスいただいた回避策で無事正常に表示させることができました。 ご親切に教えてくださり本当にありがとうございました。

関連するQ&A

  • ヒアドキュメントの中で関数を呼び出す方法

    すべての携帯コンテンツをphpで下記のように作成しており、絵文字を使いたいと思いますが、ここの絵文字変換プログラムを多少変更してPHP内で<?php emoji(絵文字番号)>って呼び出しできるようになったのですが、すでにあるPHPコンテンツはヒアドキュメントからecho出力しており、ヒアドキュメント内から関数(絵文字番号)って呼び出すことができません。何かいいアドバイスか他の処理方法をできれば簡単にコードを書いて教えていただけると幸いです。お願いします。 関数----------------- 省略 function emoji($data) { global $agent,$emoji_array; 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]; } else { $put = "<img localsrc=\"".$emoji_array[$data][2]."\" />"; } break; case "s"; if (preg_match("/^[A-Z]{1}?/", $emoji_array[$data][3])) { $put = "\x1B\$".$emoji_array[$data][3]."\x0F"; } else { $put = $emoji_array[$data][3]; } break; case "p"; $put = "[PCでは絵文字は表示されません]"; break; } echo $put; } else { echo "[Error!]\n"; } } ----------------------------------------- &contents = <<<HTML <html> <head> </head> <body> コンテンツコンテンツ<br> →ここで関数(絵文字番号)って呼び出したい! </body> </heml> HTML;

    • 締切済み
    • PHP
  • 携帯絵文字の掲示板について

    いつも感謝してますが、また質問してしまいました。 本当に情けないです。。。。 現在携帯サイトを構築しています。 PHP×携帯デベロッパーズバイブルって本の掲示板の一部分なんですが、以下の箇所(具体的には正規表現の箇所)でエラーがでます。 またこの掲示板のスクリプトなんですが、この本自体のサンプルコードはどこかに落ちてないのでしょうか? できれば、それが一番早いんですが。。。。 /* * 絵文字の入った入力文字列を内部絵文字の入った文字列に変換する(SoftBankの3GC) * * @param integer $data 入力された文字列 * @return string 内部絵文字に変換された文字列 */ function emoji_text_input_softbank_utf8($data){ //入力文字が空の場合 if(empty($data)){ return $data; } $old_data=$data; $new_data=''; while(1){ if(strlen($old_data)==0){ break; } $moji=mb_substr($old_data,0,1,'UTF-8'); $old_data=mb_substr($old_data,1,mb_strlen($old_data),'UTF-8'); //内部絵文字に変換する。 $output=preg_replace_callback('/\xEE([\x80\x81\x84\x85\x88\x89\x8C\x8D\x90\x91\x94][\x80-\xBF])/','emoji_input',$moji); $new_data.=$output; } return $new_data; }

    • ベストアンサー
    • PHP
  • 携帯サイトでの絵文字対応BBSの作成で絵文字の変換に困っています。

    PHPとMySQLを使って絵文字対応の携帯サイト用BBSを構築しています。データベースに登録した絵文字付のコメントを取得すると、絵文字部分がうまく表示されずに困っています。 現在、携帯サイト用の絵文字対応BBSを作成しています。フォームから絵文字付のコメントを入力して、それをDBに登録、または登録されている絵文字付コメントをDBから取得するというものです。 DBに登録する際に入力した絵文字を「<emoji=1,,,>」のような形に変換してeucJP-winでDBに登録します。 出力する際には「<emoji=1,,>」を対応する絵文字に変換(事前に変換表を作成しました。)して画面に出力します。 その際、直接ソースに記述した<emoji=1,,>は対応する絵文字に変換されて表示されるのですが、DBから取得した絵文字付コメント(例:こんにちは<emoji=1,,>)は対応する絵文字に変換されない状態になっており困っています。 ob_start();                     :                     : <?php $mysql=new MySQL; $sql="SELECT no,title,imp FROM s001osirase ORDER BY no DESC LIMIT 0,3"; $mysql->query($sql); while($row=$mysql->fetch()){ $no=$row['no']; $title=$row['title']; $title=mb_convert_encoding($title,'SJIS-win',mb_internal_encoding()); $imp=$row['imp']; if($imp=="yimp"){ echo '<div style="color:#FF0000;font-size:xx-small;">[重要</div>'; echo '<div style="font-size:xx-small;"><a href="/mobile/s001/bbs/bbs_show.php?no='.$no.'">'.$title.'</a></div>'; }else{ echo '<div style="color:#FF0000;font-size:xx-small;">[普通]</div>'; echo '<div style="font-size:xx-small;"><a href="/mobile/s001/bbs/bbs_show.php?no='.$no.'">'.$title.'</a></div>'; } } ?>                 : //内部文字コード(eucJP-win)をSJIS-winに変換する関数 outpue_encode(); //<emoji=1,,,>部分を絵文字に変換してバッファを出力する関数 emoji_output(); emoji_output関数は以下のとおりです。 function emoji_output(){ $output_str=ob_get_contents(); ob_end_clean(); header('Content-Type: application/xhtml+xml;'); $output_str=preg_replace_callback('/<emoji=([0-9,]+)>/','emoji_output_changea',$output_str); echo $output_str; } コールバック関数emoji_output_changeaで$output_str内の<emoji=1,,,>を絵文字に変換しています。 ob_start()を使ってバッファにためて、emoji_outputで<emoji=1,,>を一括でpreg_replace_call関数を使って絵文字に変換して出力しています。この関数は問題なく動いていると思います。 DBから取得した記事が格納された変数$titleのみ変換されていないように思います。 考えられる原因がお分かりの方、いらっしゃいましたらよろしくお願いします。 わかりづらい文章で申し訳ありません。

    • ベストアンサー
    • PHP
  • 文字列変換について

    質問させてください。 携帯のサイトで各種(Vodafone, au)携帯電話からBBSに感想を入力する画面を作成しました。 入力される文字列は文字、数字、絵文字があります。 入力されたデータはPostgreSQLのDBに格納しています。 その格納された文字列(絵文字含む)を各種携帯で 表示してみたところ、お互いの絵文字が問題に なったため、変換処理を追加しました。 ======================================== $msg = "********";(DBから取得した文字列(絵文字含む)) $emoji = file(emoji_file.txt); for($r=0;$r<count($emoji);$r++){ $string = chop($emoji[$r]); $emoji_data = split("===", $string); if(strstr($msg, $emoji_data[0])){ echo("HIT"); $msg = eregi_replace($emoji_data[0], $emoji_data[1], $msg); } } echo($msg); ====================================== emoji_file.txt $Fr===1 $G-===281 $G.===287 ====================================== 上記のプログラムで、 DBから取得した文字列内にemoji_file.txt にある絵文字データがあれば数値に変換したいと 考えていますが、"HIT"が表示されるにも かかわらず変換されずに表示されます。 これは、"$G."などVodafoneの絵文字が 普通の文字列と違うからでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 絵文字変換スクリプトに使用方法について

    現在、携帯サイトを作成中です。 1ソースで3キャリア対応のサイトを目指しているのですが、 絵文字の互換性のなさにつまずいております。 そこで、絵文字変換スクリプトを使い、絵文字を3キャリアで表示 可能にしようと思ったのですが、使用方法が分かりません。 絵文字変換スクリプトを使用する際、やったことは (1)<http://www.dspt.net/tools/emoji/>を参考にしています。 (2)<http://fs-server.net/index.html>⇒こちらのサーバーを使用しています。 (3)絵文字変換スクリプトをDL (4)画像以外はアスキーモードでサーバーにUL (5)サーバーのTOPディレクトリに「.htaccess」ファイルを作成。 記述内容は、1行目(AddHandler server-parsed html ) 2行目(AddType application/xhtml+xml .html )です。 ローカルでテキスト編集し、サーバー上で「.htaccess」ファイル に変換しました。 (6)絵文字を表示させたいhtmlファイルに<!--#include virtual="/php/emoji/trans.php?emoji=1"-->と記述。 以上のことをした時、絵文字が表示されませんでした。 代わりに、「an error occurred while processing this directive」 と表示されました。 私的にphpの仕組みがよく分かっておらず、原因は.htaccessファイルの 置き方が悪いのかと思っています。 お分かりになる方がいらっしゃったら、絵文字が表記されない原因を 教えて頂ければと思います。 何卒よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯サイト文字化け

    いつもお世話になっております。 現在、既存システムの携帯サイトを作っているのですが、 auでの文字化けが解決できずに困っています。 1週間程悩んでいるのですが、 自分で解決するにはかなり限界がきています。 そこで、ここのサイトで質問させて頂くことにしました。 詳細内容 ・開発言語:PHP ・データベース:MySQL ・文字コード:EUC-JP(既存システムが全てEUC-JPで作成されているので、携帯サイトもEUC-JPで作成しています。) ・システム概要:既存システム(物件検索システム)の携帯対応 データベースに保存されているデータを取得して、表示させる。 ・バグ内容:auでの文字化け *ただ、au携帯でも文字化けが起こる機種と起こらない機種が存在します。 例えば、W61SAだと起こりませんが、W44TやW53CAだと文字化けが発生します。 ヘッダー部分の書き方に問題があると思うのですが、 文字化け対策についてアドバイスを頂けないでしょうか? <?php //キャリア判定_start function GetCarryer($agent){ if (preg_match("/^DoCoMo\/2\.0/i", $agent)) { // DoCoMo FOMA (XHTML) $type="DOCOMO"; } else if (preg_match("/^DoCoMo\/1\.0/i", $agent)) { // DoCoMo MOVA $type="DOCOMO"; } else if (preg_match("/^SoftBank/i", $agent)) { // SoftBank $type="SOFTBANK"; } else if (preg_match("/^(Vodafone|MOT-)/i", $agent)) { // Vodafone 3G $type="SOFTBANK"; } else if (preg_match("/^J\-PHONE/i", $agent)) { // Vodafone 1G,2G } else if (preg_match("/^KDDI\-/i", $agent)) { $type="AU"; // au (XHTML) } else if (preg_match("/UP\.Browser/i", $agent)) { // au (HDML) TU-KA $type="AU"; } else if (preg_match("/WILLCOM/i", $agent) || preg_match("/DDIPOCKET/i", $agent)) { // WILLCOM Air EDGE $type="SOFTBANK"; } else if (preg_match("/^PDXGW/i", $agent)) { // WILLCOM EDGE LINK $type="SOFTBANK"; } else if (preg_match("/^(L\-mode)/i", $agent)) { // L-mode $type="NG"; } else { //PC or フルブラウザ $type="PC"; } return $type; } $agent = $_SERVER['HTTP_USER_AGENT']; if(GetCarryer($agent)=="PC"){ print<<<ERROR <div style="margin:20px auto 0px auto;text-align:center;color:#4E4E4E;font-size:14px;">このサイトはパソコンからは見ることが出来ません。</div> ERROR; exit; } //キャリア判定_end //DocomoのCSS対策 header('Content-Type: application/xhtml+xml; charset=EUC-JP'); print <<<DATA <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> DATA; ?> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=EUC-JP" /> <meta http-equiv="Content-Type" content="text/css" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Expires" content="-1" /> <meta name="description" content="" /> <meta name="keywords" content="テスト投稿1件目" /> <title>モバイル版テストページ</title> </head> <body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0"> <a name="top"></a> <div style="background-color:#333399"><div style="font-size:xx-small; color:#FFFFFF; text-align:center">モバイル版テスト用会社</div></div> <div><img src="../../../img/spacer.gif" height="5"></div> <div style="font-size:xx-small;"> <div style="color:#000099;">テスト投稿</div> <hr size="1" style="margin-top:2px;margin-bottom:2px;" /> <div><img src="../../../img/spacer.gif" height="3"></div> <div style="font-size:xx-small;"> テスト投稿07<br /> <?php /** 処理省略(データベースからデータの取得と出力処理) **/ ?> <a href="#">>>詳細へ</a> <br /> </div> <hr size="1" style="margin-top:2px;margin-bottom:2px;" /> <a href="#" accesskey="0">トップページへ</a> </div> </body> </html>

    • ベストアンサー
    • PHP
  • 3キャリア携帯の絵文字をユーザーエジェントで制御

    ユーザーエジェントで識別して表示したいと思っているのですが 下記のようなエラーが表示されてしまいます。 Warning: Unexpected character in input: ''(ASCII=27) state=5 in /home/XXXX/XXXX/XXX.php on line 17 エラー箇所 14 elseif( preg_match( "/SoftBank/", $_SERVER['HTTP_USER_AGENT'] ) ) 15 { 16 $heart =<<<eof 17 ←$GB (←は、特殊な矢印です。確認画面で表示されません) 18 eof; 19 } ソフトバンクの絵文字コードが原因だと言うところまでは判りました。 (ソフトバンクの絵文字コードを消してテストしたら正常に表示されました) 僕の判る範囲で修正を試みたのですが一向に改善されません。 どなたか知恵を頂ければと思い投稿させて頂きました。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 携帯ユーザーのPHPによる振り分け

    WindowsXP dreamweaverCS3を使用 PHPの知識はまったくありません。 PCサイト「www.deri6mon.com」(PC用サイト)がすでにできており、 これをQRコードに変換してあります。 そのQRコードをユーザーがスマホと携帯のバーコードリーダーで変換し、 PCサイトにアクセスさせますが、携帯ユーザーは当然容量がオーバーしますので エラーでとまってしまいます。 そこで、別に携帯サイトを用意してPCサイトにアクセスしてきた携帯ユーザーを 携帯サイトに自動で振り分けたいと考えています。 PCサイトの最上部に下記を記述しました。 PHPを書き込んだファイルはhtml→phpに拡張子を変換してあります。 -----------------ここから------------------- <?php $page_m='http://www.deri6mon.com/mb/index.html'; $agent=$_SERVER['HTTP_USER_AGENT']; if (preg_match("/UP\.Browser\/[3-5]/",$agent) || preg_match("/J-PHONE\//",$agent) || preg_match("/DoCoMo\//",$agent) && !(preg_match("/(Win|Mac|Linux|FreeBSD|OS¥/2|Solaris)/i",$agent)) || preg_match("/UP.Browser/",$agent) || preg_match("/^Vodafone/",$agent) || preg_match("/^SoftBank/",$agent) || preg_match("/^MOT-/",$agent) || preg_match("/DDIPOCKET;/",$agent) || preg_match("/WILLCOM;/",$agent) || preg_match("/L-mode\/\//",$agent)) { header("Location: $page_m"); }else{ }//end if ?> -----------------ここまで---------------- しかしどうしても携帯でPCサイトが表示されてしまいます。 どこの設定(記述)をどうしたら良いのでしょうか。 因みにhttp://emu.mobile.goo.ne.jp/emu/emu.phpでPCサイトのアドレスを入れると携帯サイトのTESTが表示されるので記述は問題ないと思います。 教えてgooの過去Qを調べてみて気がついた記述が、私が使っているサーバーは 自動で挿入される広告があり「header Locationはエラーになる」というのが ありました。 これを回避するにはどうすればいいのでしょうか? PHPの知識が無いのでわかりやすく回答していただけるとたすかります。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 携帯からの絵文字をWebで再現するには?

    HTML_Emojiでいい感じになるかと思ったんですが、フォームからの入力ではなく、携帯端末から受け取った絵文字メールをサーバーで解析してWeb画面に出力したいです。 受け取ったメール本文を ISO-2022-JP から UTF-8 に変換してDBに格納してSELECTして、HTML_Emoji咬ませて画面出力したいのですが、DB格納時点で「?」に文字化けしています。 何かしら回避策はあるのでしょうか? 無理なら「無理」と答えが欲しいです。

    • 締切済み
    • PHP
  • 絵文字をふんだんに使った携帯サイトのパケット量

    掲示板など見ていると、たまに「&#10084」というようなコードみたいなものが文章の中に混じっていたりします。 これ、おそらく携帯からアクセスしている人が絵文字を入れたものですよね? 例えばiモードなどで携帯サイトとかを見ると、絵文字がふんだんに使われていたりしますが、あの絵文字は画像データとして貼り付けられているのかと思っていました。 もしかしてサイト上は「&#10084」のように文字データしかなく、携帯の中で変換されて表示されているものなのでしょうか? 画像データならパケット代が増えるだろうからとメールに使うのも遠慮していたんですが、実際送られているのは「&#10084」という文字だけで文字としてのデータだけで、サイトやメールに絵文字を使ったからといって画像ほどパケットは増えないという認識で間違いはないですか?