PHP 日本語を含むURLでfile_get_contents()がfalseになる。
日本語ドメインじゃなく、ファイル名等に日本語が使われいるときの問題。
作成日:2018-02-19, 更新日:2018-07-10
基本
URLじゃなくてファイル名に特定の日本語が使われているときの問題。
SJIS絡みの可能性が限りなく高い・・・。
$url = 'http://ドメイン/日本語ファイル名'; var_dump(@file_get_contents($url)); // 「false」になることがある
・ファイル名のトコだけ分割されているなら、ファイル名を「urlencode()」してあげる。
・区切られていない場合は・・・どうにかする。
ファイル名のトコだけ分割されている場合
$domn = 'http://〇〇〇/〇〇〇/'; $path = '日本語のファイル名.html'; var_dump( $domn . urlencode($path) );
ファイル名のトコが分割されていない場合
・日本語ドメインは・・・エラー分岐させない(あらかじめPUNYコードにしておく)
・1バイト文字じゃない文字を「urlencode()」する。
良い方法があるかもしれないけど・・・分からないので「preg_replace_callback()」で対応する
function parseTagsRecursive($input) { $regex = '/[^\x01-\x7E]/u'; if (is_array($input)) { $input = urlencode($input[0]); } return preg_replace_callback($regex, 'parseTagsRecursive', $input); } $url = 'http://ドメイン/日本語ファイル名'; $fixUrl = parseTagsRecursive($url); var_dump( @file_get_contents($fixUrl) );