ここのサイトで対策用のPHPを作成配布してくれてます。感謝です。PHPは以下のとおり。
load-as-x-charset.php
<?php
// 雀の往来
if( !(isset($_GET['url']) && isset($_GET['s']) && isset($_GET['d'])) ) {
about();
exit();
}
$source_charset = $_GET['s'];
$source_charset_php = get_phpcharset($source_charset);
$dest_charset = $_GET['d'];
$dest_charset_php = get_phpcharset($dest_charset);
$contents = file_get_contents($_GET['url']);
$contents = mb_convert_encoding( $contents, $dest_charset_php, $source_charset_php );
$pattern = '/('SJIS-win',
'euc-jp'=>'eucJP-win',
'utf-8'=>'UTF-8',
);
if( isset($table[$key]) ) {
return $table[$key];
} else {
return $name;
}
}
function about()
{
$html = <<<_EOT_
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<h1>文字コードを指定してHTMLを読み込みますよ(^o^)丿</h1>
<form method='GET'>
<p>読込元の文字コード:
<select name='s'>
<option value='UTF-8'>UTF-8</option>
<option value='Shift_JIS' selected>Shift_JIS</option>
<option value='EUC-JP'>EUC-JP</option>
</select>
</p>
<p>変換後の文字コード:
<select name='d'>
<option value='UTF-8' selected>UTF-8</option>
<option value='Shift_JIS'>Shift_JIS</option>
<option value='EUC-JP'>EUC-JP</option>
</select>
</p>
<p>取得するURL:<input type='text' name='url' value='http://www.aso-taro.jp/diary/index.html' size='60'></p>
<p><input type='submit'></p>
</form>
</body>
</html>
_EOT_;
echo $html;
}
class PathReplace
{
static public function toAbsolutePath( $baseurl, $html )
{
return preg_replace('/(href|src)s*=s*("[^\"]*"|'[^\']*')/e', 'self::expand_links("$baseurl","$1","$2")', $html);
}
static private function expand_links($baseurl, $elem, $link) {
$link = trim($link, ''"');
if( preg_match( '/^[w]{2,8}:///i', $link ) ) {
$top = '';
} else {
$top = self::is_root_reference($link)
? self::rootname($baseurl)
: ( self::str_right($baseurl,1)=='/' ? $baseurl : dirname($baseurl).'/' );
}
return("{$elem}="{$top}{$link}"");
}
// リンクがルートパスへの参照をしているか調べる
static private function is_root_reference($link)
{
return (self::str_left($link,1) == '/');
}
// URLのドメイン名までの部分を取得
static private function rootname($url)
{
return preg_match('/^([a-z]{2,10}://[^/]+)/i', $url, $r) ? $r[1] : '';
}
// 文字列を右側から指定数切り取って返す。ExcelのRIGHT関数と同様。
static private function str_right( $string, $n )
{
return substr($string, strlen($string) -$n, $n);
}
// 文字列を左側から指定数切り取って返す。ExcelのLEFT関数と同様。
static private function str_left( $string, $n )
{
return substr($string, 0, $n);
}
}
|