回答編集履歴
3
ちょうせい
test
CHANGED
@@ -92,7 +92,7 @@
|
|
92
92
|
|
93
93
|
$a=$doc->createElement('a');
|
94
94
|
|
95
|
-
$a->setAttribute("href",
|
95
|
+
$a->setAttribute("href",$url);
|
96
96
|
|
97
97
|
$a->textContent=$keyword;
|
98
98
|
|
2
sample
test
CHANGED
@@ -9,3 +9,123 @@
|
|
9
9
|
のようなタグ内の属性として与えられる可能性もあるので
|
10
10
|
|
11
11
|
PHPでやるならDOMDocumentで処理してください
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
# sample
|
16
|
+
|
17
|
+
```PHP
|
18
|
+
|
19
|
+
<form>
|
20
|
+
|
21
|
+
キーワード:<input name="keyword"><br>
|
22
|
+
|
23
|
+
URL:<input name="url" value="#url2"><br>
|
24
|
+
|
25
|
+
<input type="submit" value="send"><br>
|
26
|
+
|
27
|
+
</form>
|
28
|
+
|
29
|
+
<hr>
|
30
|
+
|
31
|
+
<?PHP
|
32
|
+
|
33
|
+
mb_internal_encoding("UTF-8");
|
34
|
+
|
35
|
+
$html=<<<eof
|
36
|
+
|
37
|
+
<p>木曾路はすべて山の中である。</p>
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
<p>あるところは岨づたいに行く崖の道であり、
|
42
|
+
|
43
|
+
あるところは<a href="#url1" target="_blank">数十間の深さに臨む木曾川の岸</a>であり、
|
44
|
+
|
45
|
+
あるところは山の尾をめぐる谷の入り口である。</p>
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
<p>一筋の街道はこの深い森林地帯を貫いていた。東ざかいの桜沢から、
|
50
|
+
|
51
|
+
西の十曲峠まで、<a href="#url1">木曾</a>十一宿はこの街道に添うて、
|
52
|
+
|
53
|
+
二十二里余にわたる長い谿谷の間に散在していた。
|
54
|
+
|
55
|
+
<a href="#url1">道路</a>の位置も幾たびか改まったもので、
|
56
|
+
|
57
|
+
古道はいつのまにか深い山間に埋もれた。</p>
|
58
|
+
|
59
|
+
eof;
|
60
|
+
|
61
|
+
$keyword=filter_input(INPUT_GET,"keyword");
|
62
|
+
|
63
|
+
$pattern="/".preg_quote($keyword,"/")."/";
|
64
|
+
|
65
|
+
$url=filter_input(INPUT_GET,"url");
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
$doc=new DOMDocument();
|
70
|
+
|
71
|
+
$doc->loadHTML("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />\n".$html);
|
72
|
+
|
73
|
+
$body=$doc->getElementsByTagName("body")[0];
|
74
|
+
|
75
|
+
if($keyword){
|
76
|
+
|
77
|
+
foreach($body->getElementsByTagName("*") as $nodes){
|
78
|
+
|
79
|
+
for($i=$nodes->childNodes->length-1;$i>=0;$i--){
|
80
|
+
|
81
|
+
$node=$nodes->childNodes[$i];
|
82
|
+
|
83
|
+
if($node->nodeType=="3" and $node->parentNode->tagName!=="a" and preg_match($pattern,$node->nodeValue)){
|
84
|
+
|
85
|
+
$v=$node->nodeValue;
|
86
|
+
|
87
|
+
$newElements=[];
|
88
|
+
|
89
|
+
foreach(preg_split($pattern,$v) as $key=>$n){
|
90
|
+
|
91
|
+
if($key>0){
|
92
|
+
|
93
|
+
$a=$doc->createElement('a');
|
94
|
+
|
95
|
+
$a->setAttribute("href",urlencode($url));
|
96
|
+
|
97
|
+
$a->textContent=$keyword;
|
98
|
+
|
99
|
+
$newElements[]=$a;
|
100
|
+
|
101
|
+
}
|
102
|
+
|
103
|
+
$t=$doc->createTextNode($n);
|
104
|
+
|
105
|
+
$newElements[]=$t;
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
foreach($newElements as $n){
|
110
|
+
|
111
|
+
$node->parentNode->insertBefore($n,$node);
|
112
|
+
|
113
|
+
}
|
114
|
+
|
115
|
+
$node->parentNode->removeChild($node);
|
116
|
+
|
117
|
+
}
|
118
|
+
|
119
|
+
}
|
120
|
+
|
121
|
+
}
|
122
|
+
|
123
|
+
}
|
124
|
+
|
125
|
+
foreach($body->childNodes as $node){
|
126
|
+
|
127
|
+
print $doc->saveHTML($node);
|
128
|
+
|
129
|
+
}
|
130
|
+
|
131
|
+
```
|
1
ちょうせい
test
CHANGED
@@ -1 +1,11 @@
|
|
1
|
+
たとえば
|
2
|
+
|
3
|
+
```html
|
4
|
+
|
5
|
+
<img src="・・・" alt="木曾">
|
6
|
+
|
7
|
+
```
|
8
|
+
|
9
|
+
のようなタグ内の属性として与えられる可能性もあるので
|
10
|
+
|
1
11
|
PHPでやるならDOMDocumentで処理してください
|