2010-08-02 2 views
2

어떻게 <p><span class="headline">을이 <p class="headline"><span> 과 가장 쉽게 바꿀 수 있습니까?PHP - 문구를 다른 문으로 대체하는 방법?

$data = file_get_contents("http://www.ihr-apotheker.de/cs1.html"); 
$clean1 = strstr($data, '<p>'); 
$str = preg_replace('#(<a.*>).*?(</a>)#', '$1$2', $clean1); 
$ausgabe = strip_tags($str, '<p>'); 
echo $ausgabe; 

나는 내가 <p> 태그에 스팬에서 클래스 선언을 취득 할 사이트에서 HTML을 변경하기 전에.

답변

0

str_replace을 사용해 보았습니까?

<p><span> 태그의 위치가 일치하는 경우, 당신은 단순히

str_replace("replacement", "part to replace", $string); 
+0

thx를 더 조사 할 것입니다! 이것은 나를 위해 잘 작동 – Arwed

+0

당신은 오신 것을 환영합니다. 나는 그것이 쉬운 수정 이었기 때문에 기쁘다 –

3

정규식을 사용하여 html을 구문 분석하지 마십시오! 이 수업에서는 필요한 것을 제공해야합니다. http://simplehtmldom.sourceforge.net/

+0

String Parsing 대신 실제로 DOM을 사용하는 제 3 자 대안 : [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http://framework.zend.com/ manual/en/zend.dom.html) 및 [FluentDom] (http://www.fluentdom.org)을 참조하십시오. – Gordon

+0

매우 좋아 보여요. 다른 모든 사람들처럼 당신의 매우 빠른 도움을 위해 – Arwed

1

정규식 HTML을 사용하면 형식을 보장 할 수 없습니다 경우입니다 구문 분석하지 않는 이유와 다른 하나를 대체 할 수 있습니다. 문자열의 형식을 이미 알고 있다면 파서 전체에 대해 걱정할 필요가 없습니다. 당신이이 형식을 알고있는 경우

귀하의 경우에는

, 당신은 str_replace

str_replace('<p><span class="headline">', '<p class="headline"><span>', $data);

+0

나의 경우의 html은 항상 같은 형식을 가지고있다. 그러나 당신의 대답을위한 thx! – Arwed

1

글쎄, 대답은 이미 인정하지만, 어쨌든 한 사용할 수 있습니다, 여기에 기본 DOM 방법으로 할 수 있습니다 :

$dom = new DOMDocument; 
$dom->loadHTMLFile("http://www.ihr-apotheker.de/cs1.html"); 
$xPath = new DOMXpath($dom); 

// remove links but keep link text 
foreach($xPath->query('//a') as $link) { 
    $link->parentNode->replaceChild(
     $dom->createTextNode($link->nodeValue), $link); 
} 

// switch classes  
foreach($xPath->query('//p/span[@class="headline"]') as $node) { 
    $node->removeAttribute('class'); 
    $node->parentNode->setAttribute('class', 'headline'); 
} 
echo $dom->saveHTML(); 

HTML에는 제목에 대한 요소가 있으므로 의미가 불필요한 "헤드 라인"클래스 대신 <h*> 요소를 사용하십시오.

+0

왜냐하면 나는 HTML 코드에서 CSS 파일을 편집하기를 좋아하기 때문입니다. - 그 외에도 다른 표제를보고 싶습니다. – Arwed

+0

링크의 텍스트도 지우고 싶다면 $ dom- > createTextNode ($ link-> nodeValue), $ link); 내 생각 엔 ? – Arwed

+0

@Arwed 의미 구조와 표현을 구별해야합니다. ''요소는 코드를 구조화하지만 제목이 어떻게 표시되는지는 설명하지 않습니다. 브라우저가 일반적으로 크고 굵게 렌더링한다는 사실은 브라우저의 문제입니다. 텍스트 브라우저는 이것을하지 않을 것입니다. 또한 다른 클래스를 적용하여 동일한 ''의 스타일을 지정할 수 있습니다. – Gordon

관련 문제