문제

BBCode를 HTML로 변환하기 위해 PHP를 작성하고 있습니다.

이 bbcode를 변환하고 싶습니다.

[quote]
Hello World
[/quote]

다음에 :

<blockquote>Hello World</blockquote>

이것을 수행하는 데 사용하는 preg_replace 기능은 다음과 같습니다.

preg_replace("/\[quote\](.+?)\[\/quote\]/s", "<blockquote>\\1</blockquote>", $bbCode);

이것은 거의 내가 필요한 모든 것을 수행하지만, 내 문제는 그것이 'Hello World'전후에서 나온 것입니다.

<blockquote>
Hello World
</blockquote>

내가 이것을 어떻게 고칠 수 있는지 아이디어가 있습니까? 모두에게 매우 감사합니다.

도움이 되었습니까?

해결책

이 정규 표현을 시도하십시오.

/\[quote\]\s*(.+?)\s*\[\/quote\]/s

다른 팁

이중 인용물 내부에서 백 슬래시를 피해야합니다. " ["대신 " ["가 필요합니다.

가능성은 ''를 사용하는 것입니다.e' Regex-Modifier, 예를 들어 전화하기 위해 trim 문자열에서 기능.

매뉴얼의 해당 페이지 인용 :

이자형 (PREG_REPLACE_EVAL)
이 수정자가 설정된 경우 preg_replace()교체 문자열에서 배경을 정상적으로 대체하고 PHP 코드로 평가하고 검색 문자열을 대체하는 결과를 사용합니다. 단일 따옴표, 이중 따옴표, 백 슬래시 (\) 그리고 NULLChars는 대체 후임자로 백 슬래시에 의해 탈출됩니다.

preg_replace() 이 수정자를 사용합니다. 다른 PCRE 기능에 의해 무시됩니다.


예를 들어,이 코드는 귀하와 약간 다릅니다.

$bbCode = <<<STR
[quote]
Hello World
[/quote]
STR;

$output = preg_replace("/\[quote\](.+?)\[\/quote\]/es", "'<blockquote>' . trim('\\1') . '</blockquote>'", $bbCode);
var_dump($output);

당신에게 줄 것입니다 :

string '<blockquote>Hello World</blockquote>' (length=36)

즉, trim 함수는 일치하는 것에 호출됩니다. 참고 문자열의 시작과 끝에서 모든 흰색 공간을 제거합니다. 최신 라인뿐만 아니라 공백과 표로.

(예를 들어, 예제 #4를 볼 수 있습니다. 수동 페이지 preg_replace)
(이 경우에는 약간의 과잉 일 수 있습니다. 추가해야합니다.하지만 어쨌든 알게되어 기쁩니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top