我想要做的是取一塊html,去掉所有html標籤,並將每行文本放入一個PHP數組中。修剪不能從MySQL中獲取數組字符串字符串
我只是一個塊試圖在我的MySQL查詢測試(因此WHERE ID = '2409'
爲ID
2409
的HTML部分看起來是這樣的:
<table class="description-table">
<tbody>
<tr><td>Saepe Encomia 2.aD NEC Mirum Populo Soluni Iis 8679-1370 Status Error Sed 9.9</td></tr>
<tr><td>Description</td></tr>
<tr><td></td>
<td><br>
<br><p></p><p></p>
<strong><br></strong> <strong><br></strong> <strong>Donec Rem </strong><br>
<br>
<strong>Animam Urgebat<br>
<br></strong> <strong><br>
<br>
Rerum Sed 8613 - 3669 8358 & 6699<br>
<br>
1.mE (magNA) QUO Ad Nominum Statum Massa<br>
ab SEM Autem Reddet Habitu Sit<br>
<br></strong> <strong> PRAEDAM ACCUMSAN PERSONARUM DENEGARE AC DUORUM</strong> <strong><br></strong> <strong><br></strong> <strong>Lius typi sit nec quo adversis cras ministri oppressa, versus class hic rem quos colubros ullo commune!economy!</strong><strong><br></strong><strong> ad Quisque Modeste</strong><strong> ac Rem Wisi</strong><strong> ex Hac Congue mus Leo</strong><strong> ab 7/92" Alias</strong><strong> ad 2/73" Adverso & Erat</strong><strong> me Personom Eget</strong><strong> ad Viribus Fuga Fuga</strong><strong> ab Louor-Sit Molles</strong><strong class="c2"> 3x Block-Off Plates</strong><strong class="c2"> ad Facunda</strong><strong class="c2"> ab Personas Diam<br>
NUNC<br>
ex Teniet te Palmam Eaque<br>
me Teniet in Versus Urna<br></strong> <strong><br></strong><br>
<strong class="c3">**CONDEMNENDUS REM CUM MAGNORUM**</strong><strong></strong><br>
</td>
</table>
這是我的PHP腳本設計成解析此
//connect to mysqli
$results = $mysqli->query("SELECT ID, post_content
FROM wp_posts'
WHERE ID = '2409';");
while($row = $results->fetch_array()) {
$htmlarray2 = preg_split('/<.+?>/', $row['post_content']);
$htmlarray = array_values(array_filter(array_map('trim', $htmlarray2)));
echo '<pre>';
print_r($htmlarray);
echo '</pre>';
. . .
}
這產生這樣
的輸出Array
(
[0] => Saepe Encomia 2.aD NEC Mirum Populo Soluni Iis 8679-1370 Status Error Sed 9.9
[1] => Donec Rem
[2] => Animam Urgebat
[3] => Rerum Sed 8613 - 3669 8358 & 6699
[4] => 1.mE (magNA) QUO Ad Nominum Statum Massa
[5] => ab SEM Autem Reddet Habitu Sit
[6] => PRAEDAM ACCUMSAN PERSONARUM DENEGARE AC DUORUM
[7] => Lius typi sit nec quo adversis cras ministri oppressa, versus class hic rem quos colubros ullo commune!
[8] => ad Quisque Modeste
[9] => ac Rem Wisi
[10] => ex Hac Congue mus Leo
[11] => ab 7/92" Alias
[12] => ad 2/73" Adverso & Erat
[13] => me Personom Eget
[14] => ad Viribus Fuga Fuga
[15] => ea Totam Poenam
[16] => ab Louor-Sit Molles
[17] => ad Facunda
[18] => ab Personas Diam
[19] => NUNC
[20] => ex Teniet te Palmam Eaque
[21] => me Teniet in Versus Urna
[22] => **CONDEMNENDUS REM CUM MAGNORUM**
)
這沒關係,但現在我遇到了在數組中的字符串前後移除空格的問題。
讓我們舉一個例子爲節點8
陣列
. . .
$arrayvalue = $htmlarray2['8'];
呼應這樣
ad Quisque Modeste
現在,我想要做的是明顯調整每個數組的元素,但爲了測試,我只使用這個變量$arrayvalue
。
我的問題是trim()
不適用於這個MySQL提取的變量。含義加入trim($arrayvalue);
沒有影響,並以與上述相同的方式回聲。
我知道這是一件與我取通過我的查詢數組,因爲如果我只是在自己的PHP腳本測試這個變量進行正常
$string = ' ad Quisque Modeste ';
echo trim($string);
它工作正常,和回聲輸出只是簡單ad Quisque Modeste
在字符串之前或之後都不需要空格。
爲什麼trim()
工作在我的while
循環中? 從元素中修剪前後空白區有什麼竅門?
編輯:這是我的完整while循環根據要求。這是一個有點不同的,那麼上面的例子(我已經做了很多的修改嘗試這種解決自己,所以它是不斷變化的),但這裏是我現在所擁有的全部:
while($row = $results->fetch_array()) {
$id = $row['ID'];
echo 'ID: ' . $id;
echo '<br />';
//replace with white space
$converted = strtr($row['post_content'],array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
trim($converted, chr(0xC2).chr(0xA0));
//remove html elements
$htmlarray = preg_split('/<.+?>/', $converted);
// remove empty array elements and re-index array
$htmlarray2 = array_values(array_filter(array_map('trim', $htmlarray)));
// test by getting single value from array
$arrayvalue = $htmlarray2['9'];
// my attempt to trim string in while loop
trim($arrayvalue);
// doesn't trim
echo '<hr>' . $arrayvalue . '<hr>';
// put this here so I can see the full array
echo '<pre>';
print_r($htmlarray2);
echo '</pre>';
}
按照要求,這裏是var_export($row['post_content']);
'<table class="product-description-table">
<tbody>
<tr>
<td class="item" colspan="3">Saepe Encomia 2.aD NEC Mirum Populo Soluni Iis 8679-1370 Status Error Sed 9.9</td>
</tr>
<tr>
<td class="title" colspan="3"></td>
</tr>
<tr>
<td class="content"><br>
<br>
<p class="c1"></p>
<p class="c1"></p>
<strong><br></strong> <strong><br></strong> <strong>Donec Rem </strong><br>
<br>
<strong>Animam Urgebat<br>
<br></strong> <strong><br>
<br>
Rerum Sed 8613 - 3669 8358 & 6699<br>
<br>
1.mE (magNA) QUO Ad Nominum Statum Massa<br>
ab SEM Autem Reddet Habitu Sit<br>
<br></strong> <strong> PRAEDAM ACCUMSAN PERSONARUM DENEGARE AC DUORUM</strong> <strong><br></strong> <strong><br></strong> <strong>Lius typi sit nec quo adversis cras ministri oppressa, versus class hic rem quos colubros ullo commune!economy!</strong><strong><br></strong><strong> ad Quisque Modeste</strong><strong> ac Rem Wisi</strong><strong> ex Hac Congue mus Leo</strong><strong> ab 7/92" Alias</strong><strong> ad 2/73" Adverso & Erat</strong><strong> me Personom Eget</strong><strong> ad Viribus Fuga Fuga</strong><strong> ab Louor-Sit Molles</strong><strong class="c2"> 3x Block-Off Plates</strong><strong class="c2"> ad Facunda</strong><strong class="c2"> ab Personas Diam<br>
NUNC<br>
ex Teniet te Palmam Eaque<br>
me Teniet in Versus Urna<br></strong> <strong><br></strong><br>
<strong class="c3">**CONDEMNENDUS REM CUM MAGNORUM**</strong><strong> </strong><br></td>
<td class="product-content-border"></td>
</tr>
<tr>
<td class="gallery" colspan="3">
<table>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td class="spacer" colspan="3"></td>
</tr>
<tr>
<td class="product-content-border"></td>
</tr>
</tbody>
</table>
<br>
<br>
<br>
<p class="c4"></p>'
最後編輯:)結果:
下面貼的解決方案。不會接受我自己的答案。
如果任何人都熟悉的正則表達式可以幫助解釋這一切背後的苦難,爲什麼這個表達式公式:/[\s]+/mu
或者說$clean_htmlarray = preg_replace('/[\s]+/mu', ' ', $htmlarray);
固定的這個問題,我會很樂意接受這是一個合適的回答和解釋。
這是什麼array_values和array_filter在那裏做?如果你只使用地圖,它會工作嗎? Obligatory:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#1732454 – mkaatman
https://3v4l.org/PMdrH ?? – hassan
我對這個不工作的位有點困惑 - '$ htmlarray2'將保留白色空間的字符串(以及一些空白字符串),'$ htmlarray'將會有字符串而沒有白色空間。你提到一個無效的循環,但你還沒有發佈一個。 – iainn