回答編集履歴

4

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

2016/10/24 10:36

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -9,6 +9,8 @@
9
9
  > <div>リンクテキスト</div>
10
10
 
11
11
  > が必要なのですが、こちらを加味すればコードはどう変化するでしょうか。ちょっと考えてみましたが、うまくできませんでした。
12
+
13
+
12
14
 
13
15
  ベストアンサー付いた後になってしまいましたがこの件含めたコードに書き直しました。
14
16
 

3

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

2016/10/24 10:36

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -1,6 +1,30 @@
1
1
  Anchorタグに指定するURLのリストはPHPで持ってる($program['url'])ので
2
2
 
3
3
  Javascriptなど関係なく、PHPで以下のようにすればいいのでは?
4
+
5
+
6
+
7
+ > <?php if ( $program[ 'url' ] == '') : ?>
8
+
9
+ > <div>リンクテキスト</div>
10
+
11
+ > が必要なのですが、こちらを加味すればコードはどう変化するでしょうか。ちょっと考えてみましたが、うまくできませんでした。
12
+
13
+ ベストアンサー付いた後になってしまいましたがこの件含めたコードに書き直しました。
14
+
15
+ 以下でどうでしょうか?そのまま if/elseif/elseで分岐しているだけです。
16
+
17
+
18
+
19
+ いろいろ前提事項
20
+
21
+ - var_dump($_SERVER["HTTP_HOST"]); などで表示してみるとわかると思いますが、ホスト名(FQDN)しか設定されてません。(最後に'/'などはいってません。)
22
+
23
+ - preg_match()の第一引数には正規表現パターンを記載します。
24
+
25
+ - $program['url'] には URL (例:'http://example.com/foo/bar/...')が設定されているのですよね?
26
+
27
+
4
28
 
5
29
 
6
30
 
@@ -8,19 +32,27 @@
8
32
 
9
33
  <?php
10
34
 
11
- if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
35
+ $linkText = 'リンクテキスト';
12
36
 
13
- $TargetBlank = 'target="_blank"';
37
+ if (empty($program['url'])) {
14
38
 
15
- } else { $TargetBlank = ''; }
39
+ $Tag = $linkText;
40
+
41
+ } else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) {
42
+
43
+ $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>';
44
+
45
+ } else {
46
+
47
+ $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>';
48
+
49
+ }
16
50
 
17
51
  ?>
18
52
 
19
- <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
53
+ <div><?php echo $tag; ?></div>
20
54
 
21
55
  ```
22
-
23
-
24
56
 
25
57
 
26
58
 
@@ -36,15 +68,25 @@
36
68
 
37
69
  $program['url'] = 'http://'. $_SERVER["HTTP_HOST"] . '/hoo/var/index.html?hogehoge';
38
70
 
39
- if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
71
+ $linkText = 'リンクテキスト';
40
72
 
41
- $TargetBlank = 'target="_blank"';
73
+ if (empty($program['url'])) {
42
74
 
43
- } else { $TargetBlank = ''; }
75
+ $Tag = $linkText;
76
+
77
+ } else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) {
78
+
79
+ $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>';
80
+
81
+ } else {
82
+
83
+ $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>';
84
+
85
+ }
44
86
 
45
87
  ?>
46
88
 
47
- <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
89
+ <div><?php echo $tag; ?></div>
48
90
 
49
91
  ```
50
92
 
@@ -60,15 +102,25 @@
60
102
 
61
103
  $program['url'] = 'https://www.yahoo.co.jp/hoo/var/index.html?hogehoge';
62
104
 
63
- if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
105
+ $linkText = 'リンクテキスト';
64
106
 
65
- $TargetBlank = 'target="_blank"';
107
+ if ($program[ 'url' ] == '') {
66
108
 
67
- } else { $TargetBlank = ''; }
109
+ $Tag = $linkText;
110
+
111
+ } else if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '\//', $program['url'])) {
112
+
113
+ $Tag = '<a href="' . $program['url'] . '" target="_blank">' . $linkText . '</a>';
114
+
115
+ } else {
116
+
117
+ $Tag = '<a href="' . $program['url'] . '">' . $linkText . '</a>';
118
+
119
+ }
68
120
 
69
121
  ?>
70
122
 
71
- <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
123
+ <div><?php echo $tag; ?></div>
72
124
 
73
125
  ```
74
126
 

2

例(テストコード)追加

2016/10/20 07:48

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -21,3 +21,55 @@
21
21
  ```
22
22
 
23
23
 
24
+
25
+
26
+
27
+ テスト:
28
+
29
+ この場合、target='_blank' は出力されない。
30
+
31
+ ```PHP
32
+
33
+ <?php
34
+
35
+ $program =array();
36
+
37
+ $program['url'] = 'http://'. $_SERVER["HTTP_HOST"] . '/hoo/var/index.html?hogehoge';
38
+
39
+ if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
40
+
41
+ $TargetBlank = 'target="_blank"';
42
+
43
+ } else { $TargetBlank = ''; }
44
+
45
+ ?>
46
+
47
+ <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
48
+
49
+ ```
50
+
51
+
52
+
53
+ この場合、target='_blank' は出力される。
54
+
55
+ ```PHP
56
+
57
+ <?php
58
+
59
+ $program =array();
60
+
61
+ $program['url'] = 'https://www.yahoo.co.jp/hoo/var/index.html?hogehoge';
62
+
63
+ if (! preg_match('/^(https?):\/\/' . $_SERVER["HTTP_HOST"] . '/', $program['url'])) {
64
+
65
+ $TargetBlank = 'target="_blank"';
66
+
67
+ } else { $TargetBlank = ''; }
68
+
69
+ ?>
70
+
71
+ <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
72
+
73
+ ```
74
+
75
+

1

コード微変更

2016/10/20 06:49

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -16,6 +16,8 @@
16
16
 
17
17
  ?>
18
18
 
19
- <div><a href="<?=$program[ 'url' ]?>" <?php echo $TargetBlank; ?>></a>
19
+ <div><a href="<?php echo $program[ 'url' ];?>" <?php echo $TargetBlank; ?>></a>
20
20
 
21
21
  ```
22
+
23
+