我正在嘗試編寫一個PHP腳本,將日文烹飪食譜從日文翻譯成英文。這是寵物項目,並不一定是完美的。我的策略是..如何使用preg_replace從遠程網站翻譯日語到英語
- 使用的file_get_contents
- 英文更換一些日本(主要成分的名稱)
- 結果寫入HTML文件
我抓取網站內容從命令行運行此PHP腳本:
<?php
// Get contents of Japanese cooking website
$url = 'http://recipe.igamono.jp/?eid=1077379';
$context = stream_context_create(array('http' => array('header' => 'Accept-Charset: UTF-8, *;q=0')));
$html = file_get_contents($url, false, $context);
// Replace stuff
$html = preg_replace('/right/s', 'foobar', $html); // works
$html = preg_replace('/の/s', 'shazam!!', $html); // doesn't work
// Write output to a file
file_put_contents('output.html', $html);
?>
我使用Sublime Text來編輯fil e(translate.php),並且我已經確保使用以下文件保存文件:使用編碼/ UTF-8的文件/保存
當我運行腳本時,除了替換「不會發生任何替換。
然而,這確實工作:
<?php
$html = "one の two の";
$html = preg_replace('/の/s', 'shazam!!', $html);
file_put_contents('output.html', $html);
?>
輸出是:
一個快變!兩個shazam!
有什麼建議嗎?我知道這是一個字符編碼問題,但我似乎無法讓它工作。
UPDATE:
下面是修改後的版本,測試在$ HTML變量UTF-8編碼:
<?php
// Get contents of Japanese cooking website
$url = 'http://recipe.igamono.jp/?eid=1077379';
$context = stream_context_create(array('http' => array('header' => 'Accept-Charset: UTF-8, *;q=0')));
$html = file_get_contents($url, FILE_TEXT, $context);
if(mb_detect_encoding($html, 'UTF-8')) print("Yep, UTF-8 it is.\n");
if(! mb_detect_encoding($html, 'UTF-8', true)) print("Well, on second thought.. maybe not!\n");
?>
輸出是:
是的,UTF- 8它是。
那麼,第二個想法..也許不是!
我的解決方案
下面是我想出了一個解決辦法:
<?php
// Get contents of Japanese cooking website
$url = 'http://recipe.igamono.jp/?eid=1077379';
$html = file_get_contents($url);
// Convert HTML to UTF-8 from Japanese
$html = mb_convert_encoding($html, "UTF-8", "EUC-JP");
// Replace stuff
$html = preg_replace('/right/s', 'foobar', $html);
$html = preg_replace('/の/s', 'shazam!!', $html);
// Convert HTML back to Japanese character encoding
$html = mb_convert_encoding($html, "EUC-JP", "UTF-8");
// Write HTML to a file
file_put_contents('output.html', $html);
?>
就是這樣!快樂它的解決.. –