2016-08-12 6 views
2

に文字列からHTML配列を剥奪しますこれから最も簡単になるでしょう。現在、私は私が望むものを達成するためにexplodeimplodeのシリーズを使用しています:有効にできますビルドは、私は次のようになります文字列を持っているPHP

$stripped = explode('<p>', $html_string); 
$joined = implode(' ', $stripped); 
$parsed = explode('</p>', $joined); 

array('Some content', 'separated by', 'paragraphs'); 

は、HTMLから配列を作成するためのより良い、より堅牢な方法はありますタグ? Looking at the docs、私は正規表現を介して解析の言及は見ませんでした。

ありがとうございました!

+1

爆発する –

+0

や 'SimpleXML'延長 – spirit

+2

のDOMDocumentは、HTMLを解析するための最良の方法ですが、正規表現のためにもhttp://php.net/manual/en/function.preg-split.phpあり'で解析

$html_string = "<p>Some content &amp; text</p><p>separated&nbsp;by</p><p style='background:yellow'>paragraphs</p>"; preg_match_all('/<p(?:\s.*?)?>\s*(.*?)\s*<\/p\s*>/si', $html_string, $matches); $paras = $matches[1]; array_walk($paras, 'html_entity_decode'); print_r($paras); 
rjdown

答えて

1

あなたは、単にそのために正規表現を使用することができ、コンテンツの内部には、/あまり他のタグとの唯一のそのシンプルの場合:

$string = '<p>Some content</p><p>separated by</p><p>paragraphs</p>'; 

preg_match_all('/<p>([^<]*?)<\/p>/mi', $string, $matches); 

var_dump($matches[1]); 

この出力を作成します。

array(3) { 
    [0]=> 
    string(12) "Some content" 
    [1]=> 
    string(12) "separated by" 
    [2]=> 
    string(10) "paragraphs" 
} 

これが最も効果ではないことに注意してくださいそれは最短ですが、DOMDocumentやそのようなものを使っています。ここで

0

phpでいくつかのhtml解析を行う必要がある場合は、php html parserという素晴らしいライブラリがあります。 https://github.com/paquettg/php-html-parser これはhtmlを解析するためにapiのようなjqueryを与えることができます。

例:

// Assuming you installed from Composer: 
require "vendor/autoload.php"; 
use PHPHtmlParser\Dom; 

$dom = new Dom; 
$dom->load('<p>Some content</p><p>separated by</p><p>paragraphs</p>'); 
$pTags = $dom->find('p'); 
foreach ($pTags as $tag) 
{  
    // do something with the html 
    $content = $tag->innerHtml; 

} 
0

あなたpタグがHTMLのレンダリングには無関係である(属性を持っている、または<br>のような他のタグが含まれている、またはそれらの間に空白がたくさんあるときにも動作しますDOMDocument溶液(ネイティブPHP)であり、 )、または、&nbsp;または&lt;のようなHTMLエンティティを含んなどなど:

$html_string = "<p>Some content</p><p>separated by</p><p>paragraphs</p>"; 
$doc = new DOMDocument(); 
$doc->loadHTML($html_string); 

foreach($doc->getElementsByTagName('p') as $p) { 
    $paras[] = $p->textContent; 
} 

// Output array: 
print_r($paras); 

あなたが本当にその後、少なくともそれに対応する文字に後者を翻訳し、タグの属性とHTMLエンティティを許可し、正規表現に固執したい場合:

DOMDocument`
関連する問題