人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です
<?php
mb_internal_encoding("utf-8");
$filename = "a.txt";
$url = "http://headlines.yahoo.co.jp/hl";
$str = file_get_contents($url);
$str = mb_convert_encoding($str, "utf-8", "auto");
preg_match("/<head>(.+?)<\/head>/ismu", $str, $arr);
$sSearch = 'meta';
$sReplace = 'a';
$sResult = str_replace($sSearch, $sReplace, $arr[1]);
file_put_contents($filename, $arr[1]);
?>
を実行してもうまく置換されません。
どこが悪いのでしょうか?

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●100ポイント

「うまく置換されません」というのは、URL 先の head タグの中身がそのまま a.txt に書き出され、"meta" が "a" に変わっていない、ということでしょうか。

str_replace 関数は、変換された文字列が、関数の返り値として取得できます。
なので a.txt に書き出すべきなのは $arr[1] ではなく、$sResult だと思います。

参考。
http://php.net/manual/ja/function.str-replace.php


2 ● Cherenkov
●100ポイント

mb_convert_encodingの第3引数にautoを使う場合はmb_language("Japanese");を取り敢えず書いておく。

<?php
mb_internal_encoding("utf-8");
mb_language("Japanese");
$filename = "a.txt";
$url = "http://headlines.yahoo.co.jp/hl";
$str = file_get_contents($url);
$str = mb_convert_encoding($str, "utf-8", "auto");
preg_match("/<head>(.+?)<\/head>/ismu", $str, $arr);
$sSearch = 'meta';
$sReplace = 'a';
$sResult = str_replace($sSearch, $sReplace, $arr[1]);
file_put_contents($filename, $sResult);

preg_replaceのほうがたぶんいい。(今回はいらんか)

$sSearch = '/meta/';
$sReplace = 'a';
$sResult = preg_replace($sSearch, $sReplace, $sResult);

3 ● asatoryu
●100ポイント ベストアンサー

置換後の文字列は$sResultに代入されます。
以下のプログラムを試してみてください。

<?php
mb_internal_encoding("utf-8");
$filename = "a.txt";
$url = "http://headlines.yahoo.co.jp/hl";
$str = file_get_contents($url);
$str = mb_convert_encoding($str, "utf-8", "auto");
preg_match("/<head>(.+?)<\/head>/ismu", $str, $arr);
$sSearch = 'meta';
$sReplace = 'a';
$sResult = str_replace($sSearch, $sReplace, $arr[1]);
file_put_contents($filename, $sResult);
?>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ