php에서 preg_replace 질문있어요... ;;; > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

php에서 preg_replace 질문있어요... ;;; 정보

php에서 preg_replace 질문있어요... ;;;

본문

$view[content] = preg_replace("/(\<img)([^\>]*)(\>)/i", "\\1\\2 class='resize' alt='' /\\3", $view[content]); 

view.php에서 위처럼 표현했습니다.

가령 게시판에서 <img src="...">이렇게 만든 태그가 있으면
<img src="..." class="resize" alt="" />이렇게 나타납니다.  만족스러워요... 그런데..

<img src="..." alt="" /> 이런식으로 게시판에 글을 쓸 때, alt와 /가 들어가 있으면
<img src="..." alt="" / class="resize" alt="" /> 게 됩니다..

<img src="..." alt="" />이렇게 쓴 것도 alt값을 무시하고
<img src="..." class="resize" alt="" /> 이렇게 나타나게 하려면 어찌 수정하면 될까요?
  • 복사

댓글 전체

그누보드를 xhtml 1.1에 맞춰서 새롭게 코딩했습니다.

테이블 사용하지 않고, 게시판이나 그 밖의 것의 다 됐습니다.
다만, 게시판 글 보기에서 문제가 서너가지 남았습니다.
 

게시판은  특성상 아무나 글을 쓸 수 있습니다.

그런데 글 중에 &나 <>게 들어 갔을 때와

글에서 &가 들어 갈 때 &로 보이긴 하지만

소스 코드를 읽을 때는 &amp;로 읽게 치환 하는 것과

<>도 역시 보일 때는 <>로 보이지만 소스에는 &lt; &gt;로 바꾸는 것입니다. 

html태그를 사용할 때 이용자들이 대체로 정확하게 표현 하지 않습니다.

<img src="" >이정도로만 하지요. 

이것을 <img src=".." class="..." alt="" />이렇게 나오게 바꿨는데,

정작 <img src=".." class="..." alt="" />게 처음부터 제대로 쓴 글의 코드까지 바뀌게 됩니다.

<img src=".." alt="" / class="..." alt="" /> 이렇게 alt가중복 되고, / 가 중간에 들어가 버립니다.

위에 제가올린 꼼 수로는 해결할 수 없는 데, 이부분에 대한 조언을 부탁드립니다.

이게 해결 되면 그누보드도 xhtml 1.1에 거의 완벽하게 맞춰 사용할 수 있게 됩니다.
이건 간단한 문제가 아닙니다. 일단 다음의 방법을 가르쳐 드리고 더 생각해보기로 하죠.

function format_imgtag($matches)
{
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $matches[0], $struct, $index);
xml_parser_free($xml_parser);

if (!count($struct)) {
// broken data input like '<img src="http://richarea.net alt=">"'
// or there are one or more attributes whose value has not quotation mark
// like <img src=http://richarea.net>
return $matches[0];
}

/* structure of $struct if $data is '<img src="http://richarea.net">' {{{
array(1) {
[0]=> array(4) {
["tag"]=> string(3) "IMG"
["type"]=> string(4) "open"
["level"]=> int(1)
["attributes"]=> array(1) {
["SRC"]=> string(19) "http://richarea.net"
}
}
}
}}} */

$img_struct = $struct[0];
$img_struct['attributes']['CLASS'] = 'resize';
if (!isset($img_struct['attributes']['ALT'])) {
$img_struct['attributes']['ALT'] = '';
}
$ret = '<img';
foreach ($img_struct['attributes'] as $attr=>$val) {
$ret .= ' '.strtolower($attr).'="'.ereg_replace('"', '\\"', $val).'"';
}
return $ret.' />';
}

$view[content] = preg_replace_callback("/<img(.*)>/is", format_imgtag, $view[content]);

문제는 다음과 같습니다. xml_parser 의 특성상 속성의 값이 따옴표가 없는 경우는 되지 않습니다. 예: <img src=http://richarea.net> 하지만 대부분 위지윅에디터로 입력이 되는 경우 따옴표가 붙기 때문에 잘 됩니다.

만일 위지윅 에디터를 쓰지 않는 경우 속성의 값을 따옴표 처리해주셔야 합니다.

옳바른 예: <img src='http://richarea.net' width='600px'>
틀린 예: <img src='http://richarea.net' width=600px>
$view[content] = preg_replace_callback("/<img(.*)>/is", format_imgtag, $view[content]);

말씀 해 주신 윗 부분에서

/<img(.*)>/is 를 /(\<img)([^\>]*)(\>)/i 게 바꿨더니, 잘 됩니다. 더 테스트 해보고 고민해 봐야겠어요.
© SIRSOFT
현재 페이지 제일 처음으로