質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

4479閲覧

取得したURLに現在のドメイン名が含まれていたらtarget="_blank”しない

takesu

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/10/20 05:12

編集2016/10/20 07:18

###前提・実現したいこと

$_SERVER['HTTP_HOST']で現在のドメイン名を取得して、指定したドメイン名と同じ場合で分岐させたい。

###該当のソースコード

php

1<?php if ( $program[ 'url' ] == '') : ?> 2<div>リンクテキスト</div> 3<?php elseif (strstr($_SERVER['HTTP_HOST'],'○○○○○○○○.com/')) : ?> 4<div><a href="<?=$program[ 'url' ]?>">リンクテキスト</a></div> 5<?php else :?> 6<div><a href="<?=$program[ 'url' ]?>" target="_blank">リンクテキスト</a></div> 7<?php endif; ?>

修正後

<?php if ( $program[ 'url' ] == '') : ?> <div>リンクテキスト</div> <?php elseif (preg_match($_SERVER['HTTP_HOST'],$program[ 'url' ])) : ?> <div><a href="<?=$program[ 'url' ]?>">リンクテキスト</a></div> <?php else :?> <div><a href="<?=$program[ 'url' ]?>" target="_blank">リンクテキスト</a></div> <?php endif; ?>

###試したこと

$_SERVER['HTTP_HOST']と$program[ 'url' ]に一致するURLがあれば、urlとリンクテキストを出力、一致しなければ target="_blank"が記載されたものが出力としたい。
上記の修正後コードでは、エラーはでていませんが、すべてにtarget="_blank"が付与されてしまいます。
→エラーでておりました。

<?php elseif (preg_match($_SERVER['HTTP_HOST'],$day_program[ 'url' ])) : ?>

がエラーになっています。

###補足情報(言語/FW/ツール等のバージョンなど)

javascript、php

javascript、phpともに初心者です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/10/20 05:23

コードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
takesu

2016/10/20 05:32

失礼いたしました。コードを修正させていただきました。ご指摘ありがとうございます。
kei344

2016/10/20 06:36

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。また、例示用ドメインはご自身で所有されていない限りexample.comを利用してください。
Y.H.

2016/10/20 07:01

エラーが発生している場合はエラーメッセージをそのまま記載ください。でないと何もアドバイスできないです。
guest

回答4

0

ベストアンサー

Anchorタグに指定するURLのリストはPHPで持ってる($program['url'])ので
Javascriptなど関係なく、PHPで以下のようにすればいいのでは?

<?php if ( $program[ 'url' ] == '') : ?> <div>リンクテキスト</div> が必要なのですが、こちらを加味すればコードはどう変化するでしょうか。ちょっと考えてみましたが、うまくできませんでした。

ベストアンサー付いた後になってしまいましたがこの件含めたコードに書き直しました。
以下でどうでしょうか?そのまま if/elseif/elseで分岐しているだけです。

いろいろ前提事項

  • var_dump($_SERVER["HTTP_HOST"]); などで表示してみるとわかると思いますが、ホスト名(FQDN)しか設定されてません。(最後に'/'などはいってません。)
  • preg_match()の第一引数には正規表現パターンを記載します。
  • $program['url'] には URL (例:'http://example.com/foo/bar/...')が設定されているのですよね?

PHP

1<?php 2$linkText = 'リンクテキスト'; 3if (empty($program['url'])) { 4 $Tag = $linkText; 5} else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) { 6 $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>'; 7} else { 8 $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>'; 9} 10?> 11<div><?php echo $tag; ?></div>

テスト:
この場合、target='_blank' は出力されない。

PHP

1<?php 2$program =array(); 3$program['url'] = 'http://'. $_SERVER["HTTP_HOST"] . '/hoo/var/index.html?hogehoge'; 4$linkText = 'リンクテキスト'; 5if (empty($program['url'])) { 6 $Tag = $linkText; 7} else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) { 8 $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>'; 9} else { 10 $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>'; 11} 12?> 13<div><?php echo $tag; ?></div>

この場合、target='_blank' は出力される。

PHP

1<?php 2$program =array(); 3$program['url'] = 'https://www.yahoo.co.jp/hoo/var/index.html?hogehoge'; 4$linkText = 'リンクテキスト'; 5if ($program[ 'url' ] == '') { 6 $Tag = $linkText; 7} else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) { 8 $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>'; 9} else { 10 $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>'; 11} 12?> 13<div><?php echo $tag; ?></div>

投稿2016/10/20 05:53

編集2016/10/24 10:36
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takesu

2016/10/20 06:15

$program['url']にはパスだけではなくて、ホスト配下が含まれてしまっているので、教えていただいたコードではできないようでした。でもとても勉強になりました!ありがとうございます。
Y.H.

2016/10/20 06:44

本質的ではない箇所ですが、少しコードを変更しました。 (<?= ?>形式はうちの環境では使えないので<?php echo $program[ 'url' ];?>に変更しています。) 「ホスト配下が含まれてしまっているので」・・・なので完全一致ではなく preg_match()を使用し正規表現でマッチさせています。 こちらでは上記で問題なく処理できています。
takesu

2016/10/20 07:16

最初の分岐で <?php if ( $program[ 'url' ] == '') : ?> <div>リンクテキスト</div> が必要なのですが、こちらを加味すればコードはどう変化するでしょうか。ちょっと考えてみましたが、うまくできませんでした。
guest

0

(Node.jsのようなサーバサイドは別として)ふつうのHTML中で使われるJavaScriptは、ブラウザ内で実行されます。一方で、PHPはサーバ側で実行されます。

ということで、ブラウザでJavaScriptを実行する頃には、PHPの実行は終わっています。「jsに処理を記載して、php内に呼び出したいです。」なんて芸当は一筋縄では行きません(し、ユーザーの入力をPHPにフィードバックさせるわけでもなければ無駄が多くなります)。

まずは「PHPで行う」か「JavaScriptで行う」かのどちらかに決めてください(ブラウザ側で変化させる必要が無いので、PHPでやったほうがいいと個人的には思います)。

投稿2016/10/20 05:20

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takesu

2016/10/20 06:12

全然理解できていませんでした!ありがとうございます。
guest

0

こちらで解決できました。
みなさまご丁寧にありがとうございます。本当に助かりました。

php

1<?php if ( $program[ 'url' ] == '') : ?> 2<div>リンクテキスト</div> 3<?php elseif (strpos($program[ 'url' ],$_SERVER['HTTP_HOST'])=== FALSE) : ?> 4<div><a href="<?=$program[ 'url' ]?>" target="_blank">リンクテキスト</a></div> 5<?php else :?> 6<div><a href="<?=$program[ 'url' ]?>">リンクテキスト</a></div> 7<?php endif; ?>

※local開発環境でチェックしていたため、本番のURLと差異が出てしまって、解決するのに時間がかかってしまいました。

投稿2016/10/20 07:30

takesu

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1// else if ($_SERVER['HTTP_HOST']=='https://指定したドメイン名/') : 2// ↓ 3 elseif ($_SERVER['HTTP_HOST']=='https://指定したドメイン名/') :

【PHP: elseif/else if - Manual】
http://php.net/manual/ja/control-structures.elseif.php

コロンを使って if/elseif 条件を指定する場合は、 else if のように分割してはいけません。 分割すると、パースエラーとなってしまいます。

投稿2016/10/20 06:02

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takesu

2016/10/20 06:16

まさかこんな落とし穴があったとは知りませんでした!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問