$sSearch[0] = '<script type="text/javascript">\r\n'; $sSearch[1] = '^<meta.*\r\n';
$sSearch[0] の方が置き換わらない理由は、シングルクォートでくくっていることと、改行コードが違ってることです。
$sSearch[1] の方は、正規表現を使っているからです。str_replace() は、正規表現を解釈しません。
http://php.net/manual/ja/function.str-replace.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 = array(); $sSearch[0] = '/<script type="text\/javascript">\n/'; $sSearch[1] = '/^<meta.*\n/m'; $sReplace = ''; $sResult = preg_replace($sSearch, $sReplace, $arr[1]); file_put_contents($filename, $sResult); ?>
preg_replace() 関数を使い、正規表現も少し手を入れてます。
んで、ひとつ目の条件は、script タグを中身ごと消したいんじゃないか、という気がしたので、script タグを丸ごと消すパターンも書いておきます。。
<?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 = array(); $sSearch[0] = '/<script type="text\/javascript">.*?<\/script>\n/s'; $sSearch[1] = '/^<meta.*\n/m'; $sReplace = ''; $sResult = preg_replace($sSearch, $sReplace, $arr[1]); file_put_contents($filename, $sResult); ?>
問題点
1.検索文字$sSearchに改行記号\nを入れるときは、文字列をダブルクォーテーションで囲む必要があります。
2.str_replaceは正規表現が通らないので、$sSearch[1]の検索で失敗します。preg_replaceを使うようにします。あわせて$sSearch[1]の書き方を修正しました。
<?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 = array(); $sSearch[0] = "<script type=\"text/javascript\">\n"; //ダブルクォーテーション $sSearch[1] = "/^<meta.*\n/mu"; //正規表現; $sReplace = array(); $sReplace[0] = ''; $sReplace[1] = ''; //置換1 $sResult = str_replace($sSearch[0], $sReplace[0], $arr[1]); //置換2 $sResult = preg_replace($sSearch[1], $sReplace[1], $sResult); file_put_contents($filename, $sResult); ?>