256 views
ここのサイトで対策用の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 = 読込元の文字コード: <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); } } |