curl するページに設定されている文字セットは Shift_JIS で、lang は jp に設定されています
function jp_new ($jp_text)
{
// Begin Curl
$session = curl_init();
//$url1 = "http://nihongo.j-talk.com/index.php";
$url1 = "http://www.romaji.org/index.php";
$parameters = '&text='.urlencode($jp_text).'&save=convert+text+to+Romaji';
$header = array(
"Accept-Language: jp",
"Accept-Charset: Shift_JIS");
// $header[] = "Accept-Language: ja";
//$parameters = 'kanji='.urlencode($jp_text).'&converter=spaced&Submit=Translate+Now';
curl_setopt($session, CURLOPT_HTTPHEADER, $header);
curl_setopt($session, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($session, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_POST, true);
curl_setopt($session, CURLOPT_URL, $url1);
$jp_page = curl_exec($session);
curl_close($session);
//$pattern = "/romaji'>(.+?)</s";
$pattern = "/color=\"red\">(.+?)</s";
preg_match_all ($pattern, $jp_page, $result_ro);
return $result_ro[1];
}
romaji.com から手動でフォームを送信した場合と同じ結果ではありません。jptext = "犬猫" が "kou (kigou)(kigou) shin i" の場合の結果
preg マッチは 1 つのマッチのみを見つけ、それを適切な場所で見つけると確信しています。ある種のエンコーディングの問題のように見えますが、実際にはそうではありません。
"http://nihongo.j-talk.com/index.php" (コメントアウトされた変数) に対して同様のカールが機能しましたが、禁止されているようですので、この新しい URL romaji.org で機能するように適応させる必要があります。
更新: romaji.org ページの文字セットは Shift_JIS で、私のページは UTF-8 なので、コード例のように curlopt ヘッダーを curl に追加しようとしましたが、出力の結果はほとんど異なりませんでした。角かっこが削除されましたが、結果はまだめちゃくちゃです。