2014-02-24 3 views
0

WYSIWYG 편집기로 만든 거대한 문자열을 출력하고 있습니다. 다음은 편집기가 출력하는 예제입니다. 나는 처음부터 끝까지 (각 태그 안에) &nbsp에 의해 생성 된 모든 공간을 막으려 고하므로 태그가 내용을 단단히 감쌀 수 있습니다. Rtrim과 Ltrim은 내부의 태그가 아니라 전체 문자열을 다듬기 때문에 작동하지 않습니다.내부 태그, 내부 문자열에서  을 제거하는 방법

다음은 문자열의 예입니다.

<div>&nbsp; &nbsp; &nbsp; Small&nbsp;amount of text, should be&nbsp;alot.</div> 
<div>Small&nbsp;amount of text, should be&nbsp;alot. &nbsp; &nbsp; &nbsp; </div> 

다음의 라인을 따라이 출력됩니다 뭔가 (공간의 범위를 보여에서 왼쪽 된 DIV하지만이 출력에 숨겨져있을 것입니다.)

<div> Small amount of text, should be alot.</div> 
<div>Small amount of text, should be alot. </div> 

내가 선호 이 출력은 ..

<div>Small amount of text, should be alot.</div> 
<div>Small amount of text, should be alot.</div> 

어떻게 달성 할 수 있습니까? 당신이 공간에 모든 &nbsp;을 변환 할 경우

preg_replace('/(?:&nbsp;|){2,}/', '&nbsp;', $string); 

을하고 다음 공간을 축소 :

+0

문자열 및 원하는 변형의 예를 제공하십시오. – AbraCadaver

+2

** 가장 좋은 방법은 SimpleXML 또는 DOMDocument 등을 사용하여 문서를 구문 분석하고 태그의 내용을 다듬은 다음 다시 문서를 다시 어셈블하는 것입니다. 당신은 여기에 정규식을 사용하지 않으려는! (누군가가 그것을 제안해야합니다) –

+0

도 제거 하시겠습니까  ? – ziollek

답변

1

하나의 &nbsp과 공간 및/또는 &nbsp;의 반복을 교체

preg_replace('/ {2,}/', ' ', str_replace('&nbsp;', ' ', $string)); 

주를이 이것은 여는 태그 다음이나 닫는 태그 앞에서 단일 공백을 제거하지 않을 것입니다. 그런 식으로 정규 표현식을 사용하여 꽤 심한 영역에 빠지면 대신 DOM 또는 XML을 사용하여 문서를 구문 분석해야합니다.

그러나 HTML에서 앞뒤 공백은 일반적으로 중요하지 않으므로 이동하려는 곳으로 가야합니다.

+0

누가 코멘트를 통해 대답 Scrowler, 정규식 나쁜 생각이라고? – user2950370

+0

@ user2950370, html 태그가 출력됩니다 (모두 허용됩니다)? – sinisake

+0

@ user2950370 대부분의 시간, 예. 나는 당신이 논평했을 때 편집을 쓰고 있었다. 당신이 공백을 붕괴하는 것에 만 관심이 있다면, 정규 표현식은 잘되어야합니다. 명시 적으로 ""태그 안에있는 것을 처리해야하는 경우 대신 DOM/XML을 살펴야합니다. – Sammitch

0

왜 문자열을 바꾸지 않으시겠습니까?

$newStr = str_replace("&nbsp;", "", $oldStr); 
+0

감사합니다. 안드로이드 애플 리케이션은 코드 작성에 쓸모가 없다. – Bikas

0

나는 당신의 최종 목표는 가정 :

  1. 는 ""와 &nbsp; 교체
  2. 스퀴즈 공백 후행 및 태그 내부에 whitechars를 선도
  3. 제거,

당신이 할 수있는 그것을 달성하십시오 :

//1 replace hard spaces with spaces 
$text = str_replace('&nbsp;', ' ', $text); 
//2 squeeze spaces 
$text = preg_replace('/\s+/', ' ', $text); 
//replace "> " & " <" with ">" & "<" respectively 
$result = str_replace(array('> ', ' <'), array('>', '<'), $text); 
관련 문제