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

質問編集履歴

3

追記

2018/08/30 00:54

投稿

helloman
helloman

スコア39

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  $dom->loadHTML($content);
6
6
  $divs = $dom->getElementsByTagName('div');
7
7
  foreach ($divs as $div):
8
- if ($div->hasAttribute('class') && strstr($div->getAttribute('class'), 'target-class')) {
8
+ if ($div->hasAttribute('class') && preg_match('/target-class/i', $div->getAttribute('class'))) {
9
9
  ----
10
10
  }
11
11
  endforeach;

2

現在実行している方法を少し編集

2018/08/30 00:54

投稿

helloman
helloman

スコア39

title CHANGED
File without changes
body CHANGED
@@ -50,10 +50,13 @@
50
50
  $dom->loadHTML($content);
51
51
  $divs = $dom->getElementsByTagName('div');
52
52
  foreach ($divs as $div):
53
- if ($div->hasAttribute('class') && strstr($div->getAttribute('class'), 'target-class')) {
53
+ if ($div->hasAttribute('class') && preg_match('/target-class/i', $div->getAttribute('class'))) {
54
54
 
55
55
  $new_p = $dom->createElement('p');
56
+ // 属性を全部コピー
57
+ foreach ($div->attributes as $attr) {
56
- $new_p->setAttribute('class', 'target-class');
58
+ $new_p->setAttribute($attr->nodeName, $attr->nodeValue);
59
+ }
57
60
  $new_p_content = $div->nodeValue;
58
61
  $new_p->nodeValue = "<span class=\"target-class-inner\">{$new_p_content}</span>";
59
62
  $div->parentNode->replaceChild($new_p, $div);

1

現在実行している方法を追加しました

2018/08/30 00:53

投稿

helloman
helloman

スコア39

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,4 @@
1
- phpDOM操作に挑戦中です。
1
+ phpDOM操作に挑戦中です。
2
2
 
3
3
  ```ここに言語を入力
4
4
  $dom = new DOMDocument();
@@ -14,12 +14,51 @@
14
14
  $contentは
15
15
  ```ここに言語を入力
16
16
  <div class="target-class">hogehoge</div>
17
- ```
17
+ <div class="no">hogehoge</div>
18
- です。
18
+ <div class="target-class">hogehoge</div>
19
+ <div class="target-class">hogehoge</div>
19
20
 
21
+ <div class="no">hogehoge</div>
22
+ <div class="target-class">hogehoge</div>
23
+
24
+ <div class="no">hogehoge</div>
25
+ <div class="no">hogehoge</div>
26
+ <div class="target-class">hogehoge</div>
27
+ ```です。
28
+
20
29
  $contentの内容を
21
30
  ```ここに言語を入力
22
31
  <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
32
+ <div class="no">hogehoge</div>
33
+ <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
34
+ <div class="target-class">hogehoge</div>
35
+
36
+ <div class="no">hogehoge</div>
37
+ <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
38
+
39
+ <div class="no">hogehoge</div>
40
+ <div class="no">hogehoge</div>
41
+ <p class="target-class"><span class="target-class-inner">hogehoge</span></p>
42
+
43
+ ```みたいな形にするにはどうしたらいいでしょうか?
44
+ 単純にdivタグを別のタグ名にしたいのです。
45
+
46
+
47
+ ### 現在実行している方法
48
+ ```ここに言語を入力
49
+ $dom = new DOMDocument();
50
+ $dom->loadHTML($content);
51
+ $divs = $dom->getElementsByTagName('div');
52
+ foreach ($divs as $div):
53
+ if ($div->hasAttribute('class') && strstr($div->getAttribute('class'), 'target-class')) {
54
+
55
+ $new_p = $dom->createElement('p');
56
+ $new_p->setAttribute('class', 'target-class');
57
+ $new_p_content = $div->nodeValue;
58
+ $new_p->nodeValue = "<span class=\"target-class-inner\">{$new_p_content}</span>";
59
+ $div->parentNode->replaceChild($new_p, $div);
60
+
61
+ }
62
+ endforeach;
63
+ return mb_convert_encoding($dom->saveHTML(), 'UTF-8', 'HTML-ENTITIES');
23
- ```
64
+ ```
24
- みたいな形にするにはどうしたらいいでしょうか?
25
- 単純にdivタグを別のタグ名にしたいのです。