teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

引用部分に自分の文が含まれてたので修正

2016/10/24 10:36

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -4,6 +4,7 @@
4
4
  > <?php if ( $program[ 'url' ] == '') : ?>
5
5
  > <div>リンクテキスト</div>
6
6
  > が必要なのですが、こちらを加味すればコードはどう変化するでしょうか。ちょっと考えてみましたが、うまくできませんでした。
7
+
7
8
  ベストアンサー付いた後になってしまいましたがこの件含めたコードに書き直しました。
8
9
  以下でどうでしょうか?そのまま if/elseif/elseで分岐しているだけです。
9
10
 

3

コメントを受けてのコード修正

2016/10/24 10:36

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -1,27 +1,48 @@
1
1
  Anchorタグに指定するURLのリストはPHPで持ってる($program['url'])ので
2
2
  Javascriptなど関係なく、PHPで以下のようにすればいいのでは?
3
3
 
4
+ > <?php if ( $program[ 'url' ] == '') : ?>
5
+ > <div>リンクテキスト</div>
6
+ > が必要なのですが、こちらを加味すればコードはどう変化するでしょうか。ちょっと考えてみましたが、うまくできませんでした。
7
+ ベストアンサー付いた後になってしまいましたがこの件含めたコードに書き直しました。
8
+ 以下でどうでしょうか?そのまま if/elseif/elseで分岐しているだけです。
9
+
10
+ いろいろ前提事項
11
+ - var_dump($_SERVER["HTTP_HOST"]); などで表示してみるとわかると思いますが、ホスト名(FQDN)しか設定されてません。(最後に'/'などはいってません。)
12
+ - preg_match()の第一引数には正規表現パターンを記載します。
13
+ - $program['url'] には URL (例:'http://example.com/foo/bar/...')が設定されているのですよね?
14
+
15
+
4
16
  ```PHP
5
17
  <?php
18
+ $linkText = 'リンクテキスト';
19
+ if (empty($program['url'])) {
20
+ $Tag = $linkText;
6
- if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
21
+ } else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) {
7
- $TargetBlank = 'target="_blank"';
22
+ $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>';
23
+ } else {
8
- } else { $TargetBlank = ''; }
24
+ $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>';
25
+ }
9
26
  ?>
10
- <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
27
+ <div><?php echo $tag; ?></div>
11
28
  ```
12
29
 
13
-
14
30
  テスト:
15
31
  この場合、target='_blank' は出力されない。
16
32
  ```PHP
17
33
  <?php
18
34
  $program =array();
19
35
  $program['url'] = 'http://'. $_SERVER["HTTP_HOST"] . '/hoo/var/index.html?hogehoge';
36
+ $linkText = 'リンクテキスト';
37
+ if (empty($program['url'])) {
38
+ $Tag = $linkText;
20
- if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
39
+ } else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) {
21
- $TargetBlank = 'target="_blank"';
40
+ $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>';
41
+ } else {
22
- } else { $TargetBlank = ''; }
42
+ $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>';
43
+ }
23
44
  ?>
24
- <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
45
+ <div><?php echo $tag; ?></div>
25
46
  ```
26
47
 
27
48
  この場合、target='_blank' は出力される。
@@ -29,9 +50,14 @@
29
50
  <?php
30
51
  $program =array();
31
52
  $program['url'] = 'https://www.yahoo.co.jp/hoo/var/index.html?hogehoge';
53
+ $linkText = 'リンクテキスト';
54
+ if ($program[ 'url' ] == '') {
55
+ $Tag = $linkText;
32
- if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
56
+ } else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) {
33
- $TargetBlank = 'target="_blank"';
57
+ $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>';
58
+ } else {
34
- } else { $TargetBlank = ''; }
59
+ $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>';
60
+ }
35
61
  ?>
36
- <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
62
+ <div><?php echo $tag; ?></div>
37
63
  ```

2

例(テストコード)追加

2016/10/20 07:48

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -9,3 +9,29 @@
9
9
  ?>
10
10
  <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
11
11
  ```
12
+
13
+
14
+ テスト:
15
+ この場合、target='_blank' は出力されない。
16
+ ```PHP
17
+ <?php
18
+ $program =array();
19
+ $program['url'] = 'http://'. $_SERVER["HTTP_HOST"] . '/hoo/var/index.html?hogehoge';
20
+ if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
21
+ $TargetBlank = 'target="_blank"';
22
+ } else { $TargetBlank = ''; }
23
+ ?>
24
+ <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
25
+ ```
26
+
27
+ この場合、target='_blank' は出力される。
28
+ ```PHP
29
+ <?php
30
+ $program =array();
31
+ $program['url'] = 'https://www.yahoo.co.jp/hoo/var/index.html?hogehoge';
32
+ if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
33
+ $TargetBlank = 'target="_blank"';
34
+ } else { $TargetBlank = ''; }
35
+ ?>
36
+ <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
37
+ ```

1

コード微変更

2016/10/20 06:49

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -7,5 +7,5 @@
7
7
  $TargetBlank = 'target="_blank"';
8
8
  } else { $TargetBlank = ''; }
9
9
  ?>
10
- <div><a href="<?=$program[ 'url' ]?>" <?php echo $TargetBlank; ?>></a>
10
+ <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
11
- ```
11
+ ```