2012-03-06 4 views
1

고객을 위해 맞춤 웹 기반 WYSIWYG HTML 편집기를 작성했습니다. 그것은 그들이 기본 HTML 텍스트를 포맷하고 이미지를 삽입 할 수 있습니다. 그들은 이미지를 삽입 할 때 나는 ##image1##과 같은 패턴으로 삽입합니다. 생성 된 HTML은 다음과 같이 할 수있다 :HTML 텍스트의 문자열 패턴을 PHP로 바꾸기

<p>some text and some more text</p> 
<p>some text and some <b>bold text</b></p> 
<div>##image1##</div> 
<p>more text can follow here</p> 
<div>##image2##</div> 

때 소풍 나는 여물을 검색하고 실제로 이미지를 표시 할 HTML 태그와 등등 이미지 발생을 교체하고 ##image1##, ##image2##을 교체하고 있어요이 HTML. 내 교체 코드는 다음과 같습니다.

// first find all occurrences of image string 
preg_match_all('|##(.+)##|', $inputHTML, $matches); 

for every match in $inputHTML 
    $output = preg_replace('|##(.+)##|', $imageHTML, $inputHTML, 1); 

이것은 시간의 움직임을 나타내지 만 입력 HTML의 변형에 따라 이상한 결과가 구문 분석됩니다. 이상한 결과를 생성하는 HTML 중 하나는 : 그 HTML을 편집하고 <div>##image2##</div> 전에 라인 브레이크를 추가 할 경우, 그것은 확인을 구문 분석

<div>##image1##</div><p class="align-justify"><strong>Peter Dekleva</strong>, <strong>Damir Lisica</strong>, <strong>Anej Kočevar</strong> in <strong>Gregor Jakac</strong> so glasbeniki, ki v svoji glasbi združujejo silovite instrumentalne vložke, markantne melodije in močna besedila.</p><div>##image2##</div><p class="align-justify">Video dvojček skladbe Brez strahu torej prikazuje oblico sproščenih trenutkov iz zaodrja, veličasnih posnetkov s koncertnega dogajanja, priprav na nastope, nepredvidljive zaključke noči.</p> 

. 어떤 아이디어가 여기에서 일어나고 왜 나는 문제가 있습니까?

나는 이것을하기위한 더 좋은 방법을 제안합니다. 대신 다른 뭔가를 삽입 할 수 있습니다 ##image1## 내 WYSIWYG 편집기에서 이미지를 삽입 할 때 ... 감사합니다

+3

왜 이미지를 삽입하지 않는 것이 좋습니까? – GolezTrol

+0

이것은 [다른 질문]과 같은 문제가 아닙니다 (http://stackoverflow.com/questions/9432947/php-replacing-all-occurances-of-certain-string-pattern-in-html-formatted-text).)? –

+0

구멍 응용 프로그램의 성격 때문에 ... 설명하기가 어렵지만 이유는 그 방법으로하지 않습니다! –

답변

1

이것은 + 수정자가 욕심이 있기 때문입니다. 따라서 마지막 인스턴스 인 ##까지 모든 항목이 일치합니다. + 뒤에 ?을 추가하여 변경 취소로 변경하십시오. 기본적으로 . 줄 바꿈과 일치하지 않기 때문에

|##(.+?)##| 

줄 바꿈이 문제를 해결하는 이유입니다. 그러나 그 대신에 수행 한 경우 : |##(.+)##|s 줄 바꿈으로 문제가 해결되지 않았을 것입니다.

편집 이전 질문에 대한 churk's answer도 올바르게 작동했을 것 같습니다.

+0

? 이 경우 문제를 해결 했어! 고마워요. 이 파싱이 실패 할 수있는시기를 알기는하지만 이것이 최종 해결책이되기를 희망합니다 ... 누군가 HTML 텍스트 안에 ## 어딘가에 넣는 것입니다 ... –

+1

@Primoz 그래, 문제가 되겠지만 항상 할 수 있습니다. '{{# {1 image}} '에 대해'/ \ {\ {# ([\ s \ S] +?) \} \} /'와 같은 것입니다. 누군가 html에서'{{#'를 사용하는 것은 거의 불가능합니다. –

0

직접 <img/>을 만들어야합니다 -하지만 어쨌든, 당신은 당신의 이미지 이름을 #을 사용하지 않는 경우, 당신은 ## 다른에 사용되지 않는다는 것을 확실하지 않은 경우 대신도 .

^#를 사용 HTML, <div>도 검사

<div>##(^#+)##</div> 
+0

WYSIWYG 편집기에서 이미지를 직접 삽입하면 형식 문제 등 모든 종류의 문제가 발생합니다 ... WYSIWYG 편집기를 사용했다면 알아야합니다.삽입 된 이미지에 바인딩 할 수있는 매개 변수가 여러 개 있으면이 문제는 더욱 분명 해집니다. 그래서 내가이 길로 가기로 결심했다. 완벽하게 작동하며,이 문제를 해결하기 위해 필요합니다. –