문제

내가 하려는 bbcode 파서는 클래스를 만들 수 있습 personalyzed 태그지만,나는 어떤 문제와 url

나는 모든 나가지 않고도 필요한 특정 문제 덕분에 정규 표현식을 하지만 문제가 있습할 때 나를 만들려고 특별한 태그는 지점을 지정한 URL 이 있습니다.

에 내가 방법은 다음과 같다:

<?
    private function check_url_from_bbcode ($tag = "url", $css = null, $url_path = null) {
        $regex_url = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
        if (!isset ($css)) $css = $this->css_link;
        $regex_url = $this->regex_url;
        if (isset ($url_path)) $url_path = "$url_path/";
        $this->bbcode = preg_replace ("/\[$tag\]([$regex_url]*)\[\/$tag\]/", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$1</a>", $this->bbcode);
        $this->bbcode = preg_replace ("(\[$tag\=([$regex_url]*)\](.+?)\[/$tag\])", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$2</a>", $this->bbcode);
    }
?>

코드와 잘 작동적인 url 을[url]http://ciao.com[/url] &[url=http://ciao.com]ciao[/url]

그러나 내가 어떤 문제와의 경우 특별한 url 을 주제 페이지가 마지막으로.fm 스타일,그래서[아티스트]레몬 젤리[/아티스트].

이 bblink 는 변환에 < a href="http://ciao.com/artist/Lemon Jelly">레몬 젤리< /a> (내가 사용했던 공간 < a>만 링크를 표시하는 코드).
링크에 있는 공백에 href 특성을 할 수 있습니 작동하지 않습니다.

<?
    private function check_url_from_bbcode ($tag = "url", $css = null, $url_path = null) {
        $regex_url = " a-zA-Z0-9\:\/\-\?\&\.\=\_\~\#\'";
        if (!isset ($css)) $css = $this->css_link;
        $regex_url = $this->regex_url;
        if (isset ($url_path)) $url_path = "$url_path/";
        // begin of the problem
        $this->bbcode = preg_replace ("/\[$tag\]([$regex_url]*)\[\/$tag\]/", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path".str_replace (" ", "+", $1)."\">$1</a>", $this->bbcode);
        // end of the problem
        $this->bbcode = preg_replace ("(\[$tag\=([$regex_url]*)\](.+?)\[/$tag\])", "<a title=\"Vai al link\" class=\"$css\" href=\"$url_path$1\">$2</a>", $this->bbcode);
    }
?>

이를 방지하기 위해 내가 쓴 작은 부분의 코드를 변경하는 href url 부분으로 타이 동일한 url 을 하지만"+""의 장소에서"공백 문자,그렇게 [작가]레몬 젤리[/아티스트] 해졌 < a href="http://ciao.com/artist/Lemon+Jelly">레몬 젤리< /a>

나는이 경험하지 않 PHP 나는 확실하지 않은 무엇이 문제입니다,나는 이 구문을 사용하여 다른 상황에서없이 발생할 문제입니다.

할 수 있는 누군가가 나에게 도움을 찾아 나는 잘못입니까?

오류를 입력 PHP 분석류:구문 오류가 예기치 않은 T_LNUMBER,기 T_VARIABLE 또는'$'in/...

도움이 되었습니까?

해결책

구문 분석 오류는 사실 때문입니다 $1 유효한 PHP 변수 이름이 아닙니다. 편지 나 밑줄로 시작해야합니다. 그만큼 $1 가변적 인 가변 preg_replace 매개 변수는 매개 변수 내부에서 유효합니다.

다음과 같은 것을 시도하십시오.

$this->bbcode = preg_replace("/\[$tag\]([$regex_url]*)\[\/$tag\]/e", "'<a title=\"Vai al link\" class=\"$css\" href=\"$url_path'. str_replace(' ', '+', '$1'). '\">$1</a>'", $this->bbcode);

그만큼 e 수정자는 교체 문자열을 PHP 코드로 평가하므로 원하는 문자열을 생성해야합니다.

지금 당장 테스트 할 수 없으므로 약간 조정해야 할 수도 있습니다. 죄송합니다 :
편집하다 마음에 들지 마세요. FTP 클라이언트를 보유하고 있습니다. REGEX를 수정했습니다. 효과가있다 :)

다른 팁

오류가있는 선 전후에 2-3 줄을 제공하십시오 (줄 번호는 PHP 구문 분석 오류에 있어야합니다.

이것은 레그 문제처럼 들리지 않습니다 ... 탈출 문제와 비슷합니다.

나는 오히려 새롭고, 왜 내가 이것을 묻는 질문에 단지 댓글을 달지 못했습니다 (내가 쓴 것이 실제로 대답이 아니기 때문에)

이를 방지하기 위해,나는 작은 쓴 부분의 코드를 변경하는 href url 부분으로 타이 동일한 url 을 하지만"+" 의 장소에서""

왜 사용 urlencode 의 콘텐츠에 태그가?

Note urlencode 만 사용해야에 대한 쿼리를 매개 변수실제 디렉토리 구성 요소에 사용해야 한다 rawurlencode, 으로,HTTP 자체를 사용하지 않+는 대신 공간이 있습니다.

나는 문제가 $ 1 참조에 있다고 생각하며 str_replace 외부의 기능 preg_replace 논쟁. $ 1 backreference는의 범위 내에서만 작동합니다. preg_replace 인수, 따라서 변수처럼 전달할 수 없습니다. str_replace; 변수로 $ 1을 사용하려고하지만 PHP에서는 변수 이름에 대해 유효하지 않습니다.

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