2013-03-24 3 views
-1

나는 내 문제를 공유하기 위해 많은 것을 피했다. 내가 많이 봤 거든 몇 가지 해결책을 찾을 수 있지만 확인되지 않았습니다. 먼저 내 문제를 설명합니다.PHP를 사용하여 HTML 문자열에서 특정 데이터를 가져 오는 빠른 방법

내 사이트에 사용자가 의견을 게시 할 수 있도록 CKEditor가 있습니다. 를 인용 사용자가 멀티에 두 개의 게시물을 클릭 가정, 데이터 내가 얻을 싶어 내가

user_name = david_sa 
post_id = 223423; 
quote_text = This is Quoted Text 

user_name = david_sa 
post_id = richard12; 
quote_text = This is Quoted Text 

original_comment = This is the Comment Text 

아래와 같이 PHP에서 별도로 모든 요소를 ​​얻으려면

<div class="quote" user_name="david_sa" post_id="223423"> 
This is Quoted Text 
</div> 

<div class="quote" user_name="richard12" post_id="254555"> 
This is Quoted Text 
</div> 

<div class="original"> 
This is the Comment Text 
</div> 

CKEditor

에서 다음과 같이 될 것입니다 PHP에서 위 형식의 데이터. 봤 거든 preg_match_all() 내 문제에 가까운, 그 문자열 패턴과 일치하는 REGEX를 사용하는 PHP 함수를 발견. 하지만 그것이 합법적이고 효율적인 솔루션인지 또는 더 나은 솔루션이 있는지는 확신 할 수 없습니다. 더 좋은 해결책이 있다면 나에게 제안 해주세요.

+2

html을 regexp로 구문 분석하는 방법에 대해 질문하는 행운의 두 가지 질문이 있습니다. 올바른 방법은 (x) html을 구문 분석하고 attrs 및 노드 값을 가져 오는 simplexml 또는 DOM을 사용하는 것입니다. – Alexey

+0

@Alexey - 현재 "PHP Object-Oriented Solutions"를 강력하게 사용하여 simpleXML 장을 읽으려고합니다. 왜 내가 그것을 읽고 그것을 뛰어 넘을 것이고 갑자기 나는 여기에 와야한다. 이제는 simpleXML의 가치를 이해하고 그 장을 읽었습니다. 감사. 관련없는 의견에 대해 유감스럽게 생각합니다. – netsmertia

+0

n/p - 누군가가 DOM 확장을 사용하여 아래 작업 코드를 제공 한 것을 확인하십시오. – Alexey

답변

2

DOMDocumentDOMXPath을 사용할 수 있습니다. HTML을 파싱하고 그로부터 무엇이든 추출 할 수있는 코드 라인은 매우 적습니다. 당신은 당신이 시작하려면 다음 XPath syntaxhere are a few examples에 익숙하지 않은 경우

$doc = new DOMDocument(); 
$doc->loadHTML(
'<html><body>' . ' 

<div class="quote" user_name="david_sa" post_id="223423"> 
This is Quoted Text 
</div> 

<div class="quote" user_name="richard12" post_id="254555"> 
This is Quoted Text 
</div> 

<div class="original"> 
This is the Comment Text 
</div> 

' . '</body></html>'); 

$xpath = new DOMXPath($doc); 

$quote = $xpath->query("//div[@class='quote']"); 
echo $quote->length; // 2 
echo $quote->item(0)->getAttribute('user_name'); // david_sa 
echo $quote->item(1)->getAttribute('post_id'); // 254555 

// foreach($quote as $div) works as expected 

$original = $xpath->query("//div[@class='original']"); 
echo $original->length;    // 1 
echo $original->item(0)->nodeValue; // This is the Comment Text 

.

+0

+1 누구나 링크를 제공 할 수 있습니다. 귀하의 조언, 예제 및 더 많은 예제/expalantion에 대한 링크가이 훌륭한 대답입니다. – Josh

+0

@Salman 코드 예제를 제공해 주셔서 감사합니다. 많은 시간을 절약하셨습니다. –

1

HTML/XML을 처리하기 위해 정규 표현식을 사용해서는 안됩니다. 이것은 DOMDocumentSimpleXML을위한 것입니다. 당신이 SimpleXML을을 사용하여 멀리 얻을 수 있어야하므로

당신의 문제는 (적절하게 응, 이름이?)

0

심지어 HTML을 구문 분석 할 정규식을하려고하지 마십시오, 비교적 간단한 것 같다. 나는 간단한 HTML DOM을 권하고 싶다. 가져 오기 : php html parser

관련 문제