2017-03-07 4 views
-2

는이 같은 문자열이 : 나는 <span class="bold"></span> 사이에 모든 것을 제거해야PHP; 구분 기호와 구분 기호 사이의 문자열을 제거하는 방법은 무엇입니까?

My name is <span class="bold">George</span> and I'm <span class="bold">21</span>. 

을이 자체를 구분 기호.

My name is and I'm . 

나는 다음과 같은 시도 :

$string = "My name is <span class=\"bold\">George</span> and I'm <span class=\"bold\">21</span>."; 
$string = preg_replace('/[^<span class="bold">](.*)[^<\/span>]/',' ',$string); 

하지만 더 출력을 받고하지있어, 빈 페이지

나는이 출력이 필요합니다.

내가 뭘 잘못하고 있니?

+1

[tag : regex]를 사용하여 [tag : html]을 파싱하는 것은 [ill advised] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags). – Xorifelse

+0

@ Xorifelse 문제는'mb_strimwidth ($ string, 0,300, '...', 'utf-8')'를 사용하고 있습니다. 이것이 html 태그에서 끝나면 내 레이아웃이 "충돌"합니다. 그렇지 않으면 나는 물론 CSS를 사용합니다. – David

+0

이것이 문제의 원인이라고 생각하십니까? 문제는 [정규 표현식으로 HTML을 파싱하려고 할 때마다, 신성하지 않은 아이가 처녀의 피를 울리며, 러시아 해커가 당신의 웹 애플리케이션을 푸시 할 때마다]입니다 (http://stackoverflow.com/a/1732454/4982088). – Xorifelse

답변

0

당신은이에 대한 정규 표현식을해야합니다.

$str = 'My name is <span class="bold">George</span> and I\'m <span class="bold">21</span>.'; 
$fixed = preg_replace('@<span class="bold">(.+)</span>@Ui', '', $str); 

편집 : 당신이 빈 페이지를 얻을

이유는 일치하려는 패턴에있다. 기본적으로 으로 바꾸고 있는데 그 중 이 아닌이 잘못된 공백 (이 경우는 전체 문자열) 사이에 공백으로 바뀝니다. 따라서 한 문자로 된 문자열을 가져오고 빈 공간이됩니다.

추 신 : "구문 분석"HTML에 대해 RegExp를 사용하면 해결할 수있는 것보다 많은 문제가 발생할 수 있으므로 질문에 대한 의견을 읽는 것이 좋습니다.

0

나는 당신이 그것과 동반하는 CSS 파일을 사용하고 있다고 생각합니다.

css에서 span 클래스 굵게에 대해 display : none을 설정할 수 있습니다.

예 : .bold {display : none;},이 솔루션을 사용하기로 결정한 경우 동일한 클래스 이름을 사용하지 마십시오. 당신은 구분 기호 사이에 어떤 건지하지 않는

+0

문제는'mb_strimwidth ($ string, 0,300, '...', 'utf-8')'입니다. 이것이 html 태그에서 끝나면 내 레이아웃이 "충돌"합니다. 그렇지 않으면 나는 물론 CSS를 사용합니다. 너 나 좀 도와 줄 수있어? – David

-1
<?php 
$string = 'My name is <span class="bold">George</span> and im <span class="bold">21</span>.'; 
echo $string = preg_replace('/[^<span class="bold">]{*}[^<\/span>]/',' ',$string); 
?> 

TRY이 ...

+0

전체 출력을 더 이상 크래시하지 않지만 태그가 제거되지 않습니다. – David