APIの天気予報を、PHP+smartyで表示しようと思います。しかし表示された画面のソースを見ると、xhtmlの最初の行に半角スペースが入って、htmlと認識されてしまいます。原因は以下のファイルのようなのですが、なにか原因がありますでしょうか?ちなみに、<?phpはファイルの先頭に、?>の後の改行はありません、文字コードはutf-8bom無しです
以下のファイルにidをpostしています。どうかご教授いただけないでしょうか?..........................................................
$documentroot = dirname( __FILE__) . '/';
require_once $documentroot . '../../php_libs/config/config.inc.php';
require_once("jsphon2/Jsphon.php");
require_once ("Net/UserAgent/Mobile.php");
require_once ("Net/IPv4.php");
require_once( _SMARTY_LIBS_DIR . "Smarty.class.php");
$smarty = new Smarty();
$smarty->template_dir = _SMARTY_TEMPLATES_DIR;
$smarty->compile_dir = _SMARTY_TEMPLATES_C_DIR;
$smarty->config_dir = _SMARTY_CONFIG_DIR;
$smarty->cache_dir = _SMARTY_CACHE_DIR;
$smarty->caching = 2;
if(isset($_POST['id'])){
//ライブドアの天気予報を表示する関数
function lwws($city,$day){
//XMLデータ取得用ベースURL
$req = "http://weather.livedoor.com/forecast/webservice/ …
//XMLデータ取得用リクエストURL生成
$req .= "?city=".$city."&day=".$day;
//XMLファイルをパースし、オブジェクトを取得
$xml = simplexml_load_file($req)
or die("XMLパースエラー");
$lwwsarea = $xml->pinpoint->location->title;
$lwwstitle = $xml->title;
$lwwsimage = $xml->image->url;
$lwwsalt = $xml->image->title;
$lwwsmax = $xml->temperature->max->celsius;
$lwwsmin = $xml->temperature->min->celsius;
$lwwsdescription = $xml->description;
$ret = '<div class="lwws">';
$ret .= '<div>'.'<span style="color:#ff0000;"></span>'.$lwwsarea.'の天気</div>';
$ret .= '<div style="background-color:#fce6f3">'.$lwwstitle."</div>";
$ret .= "<br /><div><img src=\"".$lwwsimage."\" alt=\"".$lwwsalt."\" /></div>";
$ret .= "<div>最高気温".$lwwsmax."度</div>";
$ret .= "<div>最低気温".$lwwsmin."度</div>";
$ret .= "<div>".$lwwsdescription."</div>";
$ret .= "</div>";
return array ($ret,$lwwsarea,$lwwstitle);
}
function lwws2($city,$day){
//XMLデータ取得用ベースURL
$req = "http://weather.livedoor.com/forecast/webservice/ …
//XMLデータ取得用リクエストURL生成
$req .= "?city=".$city."&day=".$day;
//XMLファイルをパースし、オブジェクトを取得
$xml = simplexml_load_file($req)
or die("XMLパースエラー");
$ret = '<div class="lwws2">';
$ret .= '<div style="background-color:#fce6f3">'.$xml->title."</div>";
$ret .= "<br /><div><img src=\"".$xml->image->url."\" alt=\"".$xml->image->title."\" /></div>";
$ret .= "<div>最高気温".$xml->temperature->max->celsius."度</div>";
$ret .= "<div>最低気温".$xml->temperature->min->celsius."度</div>";
$ret .= "<br />";
$ret .= "</div>";
return $ret;
}
//リクエストパラメータ設定
$city = $_POST['id']; //場所を設定
$day = "today"; //今日の天気
$day2 = "tomorrow";
$day3 = "dayaftertomorrow";
//ライブドアの天気予報を表示する関数をコールする
list($ret, $lwwsarea1, $lwwstitle1) = lwws($city,$day);
$ret2 = lwws2($city,$day2);
$ret3 = lwws2($city,$day3);
//キャッシュの残り時間を生成
$now=time() +(60 * 24);
$asu=time() +(60 * 60 * 24);
$y=date("Y", $asu);
$m=date("m", $asu);
$d=date("d", $asu);
$asu_byou= mktime(0, 0, 0, $m, $d, $y);
$sa= $asu_byou - $now;
}
$smarty-> assign ('lwws1' , $ret);
$smarty-> assign ('lwws2' , $ret2);
$smarty-> assign ('lwws3' , $ret3);
$smarty-> assign ('lwwsarea', $lwwsarea1);
$smarty->assign('city', $city);
$cache_id = $city;
//あすの0:00までの秒数をセットする
$smarty->cache_lifetime = $sa;
if ($smarty->is_cached("weather.tpl", $cache_id)){
$smarty->display("weather.tpl", $cache_id);
exit();
}
$smarty->display("weather.tpl", $cache_id);
No.2ベストアンサー
- 回答日時:
同じ現象か分かりませんが、
smarty の テンプレート内で BOM 付きファイルを複数 include した場合に、余分な行が(正確には違うと思います)入る現象が起こりました。
恐らく、BOM が複数重なって、それが予期しない文字として認識されてしまったのだと思います。
私の場合は、BOM をひとつのファイルだけに付けて出力したら直りました。(見る人が見れば、まったくの凡ミスです)include するファイルには BOM を付けないようにすると良いかと思います。
BOM 無しファイルを扱っているということなので、違うかもしれませんが、参考までに。
No.1
- 回答日時:
質問の内容がよくわからないので、有識者の解答を待つことにして、私からは少しだけアドバイスを。
$ret = '<div class="lwws">';
$ret .= '<div>'.'<span style="color:#ff0000;"></span>'.$lwwsarea.'の天気</div>';
$ret .= '<div style="background-color:#fce6f3">'.$lwwstitle."</div>";
$ret .= "<br /><div><img src=\"".$lwwsimage."\" alt=\"".$lwwsalt."\" /></div>";
$ret .= "<div>最高気温".$lwwsmax."度</div>";
$ret .= "<div>最低気温".$lwwsmin."度</div>";
$ret .= "<div>".$lwwsdescription."</div>";
$ret .= "</div>";
上記がすごく気持ち悪いです。可読性も低いので、ヒアドキュメントを使ってみてはいかがでしょうか?
----
$ret = <<< EOF
<div class="lwws">
<div><span style="color:#ff0000;"></span>{$lwwsarea}の天気</div>
<div style="background-color:#fce6f3">{$lwwstitle}</div>
<br />
<div><img src="{$lwwsimage}" alt="{$lwwsalt}" /></div>
<div>最高気温{$lwwsmax}度</div>
<div>最低気温{$lwwsmin}度</div>
<div>{$lwwsdescription}</div>
</div>
EOF;
----
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
reuterの記事をbeautiful.soup....
-
★PHP★フォーム登録時にタグを読...
-
objective-cでのHTMLタグ表示に...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
ファイルから読み取った改行文...
-
メッセージボックスで1025文字...
-
データベースから取り出したテ...
-
数値をASCII文字にする方法につ...
-
半角記号、全角記号を含む正規...
-
16進数の文字列をアスキーコー...
-
SJISで取得した半角カナをUTF-8...
-
jsp 改行コードで改行させて表...
-
Excel関数「COUNTIF」で”文字”...
-
文字列の置換をCStringで(C++)
-
エクセルのCOUNTIFが正しくカウ...
-
C++で空Enterの入力を判...
-
文字化け変換方法
-
文字の入力で横バー上段、中断...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
reuterの記事をbeautiful.soup....
-
正規表現で複数行に渡る範囲を...
-
変数にHTMLを代入する場合
-
javascriptの正規表現でhtmlか...
-
タグにはさまれている文字以外...
-
VBSでのhtmlタグ要素名の置換
-
objective-cでのHTMLタグ表示に...
-
phpの正規表現でstyle="●●"を削...
-
Strutsでリンクを動的に生成したい
-
PHPスクレイピングが上手くいき...
-
htmlのソースからテーブルの値...
-
JSFタグのfタグとは
-
ASP.NET(C#)とhtmlの#include
-
あるタグから対応するタグまで...
-
preg_replaceでの正規表現によ...
-
eclipseより、タスク・タグの使...
-
HTMLファイルの書き換え
-
Nvuで作成したhtmlをコピペして...
-
htmlタグ間の特定文字置換
-
[正規表現][入れ子]ネストされ...
おすすめ情報