2011-09-25 6 views
0

내 phpfusion 응용 프로그램에 새 bbcode를 추가하려고합니다. 전 preg_replace와 함께 사용하고 있습니다. 예상대로 모든 것이 잘 작동, 그림이 나타납니다 : 나는 절대 URL을 제공하는 경우preg_replace 캡처 그룹 검사

$text = preg_replace(
    "#\[gameimg(float:(left|center|right))?\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/gameimg\]#sie", 
    "'<span style=\"display: block; max-width: 350px; margin: 0 0 5px 5px; $1\"><img src=\"' 
     . (strlen('$3') > 0 ? '$3' : BASEDIR.GAMESDIR) 
     . '$5$6\" alt=\"$5$6\" style=\"border:0px; max-width: 350px;\" /></span>'", 
    $text 
); 

(//localhost/dirname/file.jpg [/ gameimg] 전을 위해 [gameimg] HTTP :.) 여기에 코드입니다 . 하지만 protokol과 hostname을 상대 URL ([gameimg] dirname/file.jpg [/ gameimg])을 사용하여 생략하면 나는 주어진 URL에 basedir.gamedir 상수를 추가 할 것으로 기대하지만 전혀 작동하지 않는다. 어떤 대체물이 아니라 이미지가 아니라 원래의 bbcode. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 여기

답변

3

몇 가지 :

거대한 preg_replace 전화입니다
  • . 어쩌면이 문제를 더 작은 부분으로 나누어 이해/유지하기가 더 쉬울 수도 있습니다.
  • "대소 문자 무시"수정 자 (i)를 사용하고 있는데 (jpg|JPG)과 같은 것이 있습니다. 이것은 중복됩니다.
  • http://..없이 [gameimg] 태그가 일치하지 않는 이유는 묻습니다. 자, 이것은 정규 표현식에 ((http|ftp|https|ftps)://)이 필요하기 때문입니다. 이 같은 ?를 추가하여이 섹션은 선택해야한다 : 오전 2시에서

    ((http|ftp|https|ftps)://)?

+0

네 임 바보 ... 그것은 선택해야합니다. 고맙습니다! – posthy