• 締切済み

言語コードの取得について困ってます!

こんばんは。 言語コードの取得について質問です。 アクセス者の言語コードを、PHPで次のような感じで取得し取っているのですが… (print のところは、ログファイル書き込みにしています) </p> $aaa =htmlentities($_SERVER["HTTP_ACCEPT_LANGUAGE"],ENT_QUOTES,'UTF-8'); print $aaa; 以下省略 ・・・ ?> ログファイルで、取得した言語コードを見てみると・・・ 主に、jp(日本)、en(英語)が多いのですが、たまに 言語コードが何も取得されてないの場合があります。(空) 何故、空(無し)の場合があるのでしょうか? 必ずしも $_SERVER["HTTP_ACCEPT_LANGUAGE"] で言語コードが取得するとは限らないのでしょうか? 確実に、どんな言語コードも取得する方法があったら教えて頂けると助かります。 中途半端な知識で対応できず、苦しんでおります。 どなたかご存知でしたら、色々と詳しく教えて頂けると助かります。 合わせて宜しくお願い致します。

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

>必ずしも $_SERVER["HTTP_ACCEPT_LANGUAGE"] で言語コードが取得するとは限らないのでしょうか? ブラウザ依存ですし、そもそもクライアントはブラウザだけではありません。 >確実に、どんな言語コードも取得する方法があったら教えて頂けると助かります。 そんなものはありません。

全文を見る
すると、全ての回答が全文表示されます。
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 ブラウザ(というかhttpでアクセスしてきた何か)が送出していないから、取得できていないものがあります。 たとえば、botと呼ばれるものの中には送出しないものがあります。 その場合は、空になってしまいます。 アクセスしてきたものがその情報を送信しているかどうかに委ねられていますので、取れないものがあるのは仕方ありません。 USER_AGENTとかもそうですが、これも送ったり送らなかったり、はたまた偽装も簡単です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 言語コードごとサブドメインのリダイレクト

    htaccessの記述について質問です。 ドメインhoge.netにアクセスがあった場合に、 ブラウザの言語コード(英語と日本語)を取得して、 英語の場合、 en.hoge.net 日本語の場合、 ja.hoge.net それぞれサブドメインにリダイレクトさせたいと思っています。 下記のような記述だと、ループになりました。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP:Accept-Language} ^en [NC] RewriteRule ^(.*) http://en.hoge.net/$1 [R=301,L] RewriteCond %{HTTP:Accept-Language} ^ja [NC] RewriteRule ^(.*) http://ja.hoge.net/$1 [R=301,L] </IfModule> どのように記述すれば、 ループにならないのでしょうか。 お詳しい方、ご教授お願いします。

    • ベストアンサー
    • HTML
  • 下記のコードはXSS脆弱ですか?(HTMLのmetaタグrefresh)

    もし私がユーザ認証のあるサービスを運営していると仮定して、 下記のコードが、私のサイトにあると危険ですか? 以下の場合、javascript: から始まるコードを実行されるので危険だと思います。 <META HTTP-EQUIV="Refresh" CONTENT="0; URL=<?php echo htmlspecialchars($_GET['path'], ENT_QUOTES); ?>"> 下記の場合なら安全ですか? <META HTTP-EQUIV="Refresh" CONTENT="0; URL=index2.php<?php echo htmlspecialchars($_GET['path'], ENT_QUOTES); ?>"> つまり、URLの後ろの、javascript: が実行されることはありますか?

    • 締切済み
    • PHP
  • htmlにコードを貼り、リファラーを取得したい

    外部のhtmlページに以下のコードを貼り付け、リファラーとアクセスページを取得しようと思っているのですが、うまくいきません。 ▼ htmlページに貼り付けたコード(外部サーバ) <script type="text/javascript" src="http://example.com/script.php"></script> ▼ script.php の 中身(自サーバ) $access_url= 'http://' . $_SERVER[HTTP_HOST] . $_SERVER[REQUEST_URI]; $referer_url = $_SERVER["HTTP_REFERER"]; [現在の状態] $access_url の中身 = http://自サーバのドメイン/script.php $referer_url の中身 = http://コードを貼り付けたページ 色々と試行錯誤してこの形になったのですが、完全に行き詰ってしまいました。 方向性だけでも良いので、どなたかご教授いただけませんでしょうか。 よろしくお願いいたしますm( _ _ )m

    • ベストアンサー
    • PHP
  • VBAでHTTPレスポンスコード取得

    EXCEL VBAで下記の質問、URLリストからHTTPレスポンスコードを取得したいと考えております。 EXCEL VBAでたくさんのURLの一覧からHTTPレスポンスコードを取得したい。 http://okwave.jp/qa/q5474619.html のBAを使用して取得を行ってるのですが、 サーバーのレスポンスが遅い際に、一定の秒数(120秒程度?)が経って 反応がない場合は、スキップしたいのですが組み込み方がどうしてもわかりません。 ご教授いただけると幸いです。

  • DBから出力の際preg_replace等が効かぬ

    データベースを使ったウェブサイト。 POSTを使ったformタグより、textareaにてテキストをsql文にて、 MySqlにinsertし、(このときにmysql_real_escape_string) 読み出すときにhtmlspecialcharsしてprint。 これが一般的な流れなのですが、 上記のまま行うと、改行(\r\n)がウェブ上に見えてしまいます。 ですので、 1:print preg_replace("/\r\n/","<br />", htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8')); 2:print nl2br(htmlspecialchars($ans['Pt_txt1'], ENT_QUOTES, 'UTF-8')); などをやって消そうとしているのですが消えません。 ためしに、 $aaa ="適当な文字"; 1:print preg_replace("/\r\n/","<br />", htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8')); 2:print nl2br(htmlspecialchars($aaa, ENT_QUOTES, 'UTF-8')); のように、MySqlを介さずに直接出力した場合、 ちゃんと改行コードは<br />に変更してくれましたので ソースの記述ミスではないと思うのです。 原因はなににあるでしょうか。 なお、現状phpmyadminで覗くと、 「フィールドA」(mysql_real_escape_stringを通してinsert) ----- あいうえお\r\nかきくけこ ----- 「フィールドB」(mysql_real_escape_stringを通さずにinsert) ----- さしすせそ たちつてと ----- となっているフィールドがありますが、 それらがhtmlで出力されたもののソースを見ると、 ----- A:あいうえお\r\nかきくけこ B:さしすせそ<br />たちつてと となぜかBのほうが希望通りの動きをします。 cを通さずにDBに入れてしまったほうが希望通りに動きます。 さっぱり困りました。

    • ベストアンサー
    • MySQL
  • 言語判別

    いつもお世話になっております。 早速ですが、Webページを開いたときに、各言語ごとに 開くページの飛び先を変更したいのです。 ASPを使って <% Dim lang lang=Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") If inStr(lang,"ja")>0 then Response.Redirect("http://aaa.co.jp/") elseIf inStr(lang,"zh-tw")>0 then Response.Redirect("http://bbb.co.jp/") elseIf inStr(lang,"zh")>0 then Response.Redirect("http://ccc.co.jp/") else Response.Redirect("http://top/co.jp/") end if %> のようにして一応は出来たのですが、これをSelect文で実現できますでしょうか? また、一般的にこのような手法は正しいですか? 宜しくお願いします。

  • ブラウザの言語に合わせて表示ページを振り分けたい

    http://www.abc.ne.jp/ // 日本語サイトルート http://www.abc.ne.jp/en/ // 英語サイトルート という構成のサイトを海外から検索・閲覧する時にhttp://www.abc.ne.jp/en/の方を表示するように修正したいと考えています。 (1)ページランクは下げたくない http://www.abc.ne.jp/に下記のようなソースのindex.phpを置き、http://www.abc.ne.jp/jp/または http://www.abc.ne.jp/index_jp.phpを作成し日本語サイトトップページとする場合、index.phpがコンテンツのないリダイレクトするだけのファイルになってしまうため、SEO上好ましくないのではないかと考えています。 【ソース】 $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); $languages = array_reverse($languages); foreach ($languages as $language) {  if (preg_match('/^ja/i', $language)) {   header("Location: http://www.abc.ne.jp/jp/");  } else {   header("Location: http://www.abc.ne.jp/en/");  } } (2)閲覧者の表示言語の選択肢は残したい 現状通りの構成でhttp://www.abc.ne.jp/index.phpに下記のようなソースを記述し、英語環境からアクセスされたらhttp://www.abc.ne.jp/en/へリダイレクトする場合、日本語のページを見たい場合でも強制的にhttp://www.abc.ne.jp/en/へリダイレクトされてしまいます。 【ソース】 $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); $languages = array_reverse($languages); foreach ($languages as $language) {  if (preg_match('/^en/i', $language)) { // http://www.abc.ne.jp/en/にはpreg_match('/^ja/i', $language)   header("Location: http://www.abc.ne.jp/en/");  } } (1)、(2)の要件を満たしつつ、閲覧環境に合わせて表示するページを制御することは可能でしょうか。 良い方法があればご教示ください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • C++言語 更新ファイルからログ情報取得

    随時更新されるログファイルから、 linux のC++言語でログ情報を随時取得するプログラムをつくっています。 ログ情報は、毎秒更新されるので、更新されたログ情報だけを 取得したいのですが、どうすればよいでしょうか? ログをどこまでよみとったかを覚えておく方法はあるのでしょうか? よろしくおねがいします。  

  • このコードの使い方は間違ってますか??

    $id = $_SERVER['HTTP_USER_AGENT']; if(strstr($id, "DoCoMo")){ $uid = $_SERVER['HTTP_X_DCMGUID']; echo "$uid"; }else if(strstr($id, "J-PHONE|Vodafone|SoftBank")){ $uid = $_SERVER['HTTP_X_JPHONE_UID']; echo "$uid"; }else if(strstr($id, "KDDI")){ $uid = $_SERVER['HTTP_X_UP_SUBNO']; } 固体識別情報を取得するコードです。 他サイトでstrstr()の使い方が間違えてると言われましたが、どう間違えてますか??

    • ベストアンサー
    • PHP
  • Winsockでステータスコードを受信するには

    タイトルの件でおうかがいします。 httpサーバにGETなりPOSTのリクエストをしたときのHTTPステータスコードは、どのようにして取得すればよいでしょうか? 「200 OK」とか「403 Forbidden」とかいうのを取得したいのですが…。 よろしくお願いします。

このQ&Aのポイント
  • MF-HTU3B128GはMacBook Pro バージョン10.15に対応していますか?
  • ご質問の内容は、MF-HTU3B128GがMacBook Pro バージョン10.15に対応しているかどうかについてです。
  • MF-HTU3B128GはMacBook Pro バージョン10.15と互換性がありますか?
回答を見る