2012-06-10 8 views
0

) HTML을 bbcode로 번역하는 기능이 작동하지 않습니다. HTML 대응 코드로 올바르게 변환되는 [spoiler] bbcode 태그를 작성했습니다.PHP : 동일 문자열이 함께 일치하지 않음 (

하지만 다시 BBCode는로를 설정하려고 할 때 그것을 겉으로는 동일한 문자열과 일치하지 않는 것 ...

천천히 어디에 문제가보고 조각으로 그것을 조각을 재건 한 후, 그것을 밝혀에만 내가

012,351,641에 onclick="showSpoiler(this)"

를 추가 할 때 실패

#<div><input type="button" onclick="showSpoiler(this)"/><div>(.*)</div></div>#ig' 

내가 더 (괄호까지를 좁혔다. 나는 [스포일러] 태그에서 생성되는이 \ (

HTML 코드처럼 그들을 탈출을 시도하다 :

`$ (1)

하고에 대해 일치하는 문자열이

입니다 여기
'#<div><input type="button" onclick="showSpoiler(this)"/><div>(.*)</div></div>#ig' 

당신이 태어나 셨 변환 기능 정규식에서

<?php 
//This function let convert BBcode to HTML 
function bbcode_to_html($text) 
{ 
    $text = nl2br(htmlentities($text, ENT_QUOTES, 'UTF-8')); 
    $in = array(
      '#\[b\](.*)\[/b\]#Usi', 
      '#\[i\](.*)\[/i\]#Usi', 
      '#\[u\](.*)\[/u\]#Usi', 
      '#\[s\](.*)\[/s\]#Usi', 
      '#\[img\](.*)\[/img\]#Usi', 
      '#\[url\]((ht|f)tps?\:\/\/(.*))\[/url\]#Usi', 
      '#\[url=((ht|f)tps?\:\/\/(.*))\](.*)\[/url\]#Usi', 
      '#\[left\](.*)\[/left\]#Usi', 
      '#\[center\](.*)\[/center\]#Usi', 
      '#\[right\](.*)\[/right\]#Usi', 
      '#\[spoiler\](.*)\[/spoiler\]#Usi', 
      '#\[fuck\](.*)\[/fuck\]#Usi' 
     ); 
    $out = array(
      '<strong>$1</strong>', 
      '<em>$1</em>', 
      '<span style="text-decoration:underline;">$1</span>', 
      '<span style="text-decoration:line-through;">$1</span>', 
      '<img src="$1" alt="Image" />', 
      '<a href="$1">$1</a>', 
      '<a href="$1">$4</a>', 
      '<div style="text-align:left;">$1</div>', 
      '<div style="text-align:center;">$1</div>', 
      '<div style="text-align:right;">$1</div>', 
      '<div><input type="button" onclick="showSpoiler(this)" value="Show/Hide" /><div class="inner" style="display:none;">$1</div></div>', 
      '<div><input type="button" onclick="showSpoiler(this)"/><div>$1</div></div>' 
     ); 
    $count = count($in)-1; 
    for($i=0;$i<=$count;$i++) 
    { 
     $text = preg_replace($in[$i],$out[$i],$text); 
    } 
    return $text; 
} 
//This function let convert HTML to BBcode 
function html_to_bbcode($text) 
{ 
    $text = str_replace('<br />','',$text); 
    $in = array(
     '#<strong>(.*)</strong>#Usi', 
     '#<em>(.*)</em>#Usi', 
     '#<span style="text-decoration:underline;">(.*)</span>#Usi', 
     '#<span style="text-decoration:line-through;">(.*)</span>#Usi', 
     '#<img src="(.*)" alt="Image" />#Usi', 
     '#<a href="(.*)">(.*)</a>#Usi', 
     '#<div style="text-align:left;">(.*)</div>#Usi', 
     '#<div style="text-align:center;">(.*)</div>#Usi', 
     '#<div style="text-align:right;">(.*)</div>#Usi', 
     '#<div><input type="button" onclick="showSpoiler(this)" value="Show/Hide" /><div class="inner" style="display:none;">(.*)</div></div>#Ui', 
     '#<div><input type="button" onclick="showSpoiler(this)"/><div>(.*)</div></div>#ig' 
    ); 
    $out = array(
     '[b]$1[/b]', 
     '[i]$1[/i]', 
     '[u]$1[/u]', 
     '[s]$1[/s]', 
     '[img]$1[/img]', 
     '[url=$1]$2[/url]', 
     '[left]$1[/left]', 
     '[center]$1[/center]', 
     '[right]$1[/right]', 
     '[spoiler]$1[/spoiler]', 
     '[fuck]$1[/fuck]' 
    ); 
    $count = count($in)-1; 
    for($i=0;$i<=$count;$i++) 
    { 
     $text = preg_replace($in[$i],$out[$i],$text); 
    } 
    return $text; 
} 
?> 
+1

나는에 대한 참조가 '이'설정되지 않으므로 함수가 실행되고 있지 않은지 가정을 만들려고하고 있습니다. – Jonathan

+0

이 기능은 작동합니다. [스포일러] 태그는 기능적입니다. 그것은 "게시물 편집"을 클릭하고 html을 bbcode로 변환해야 변환이 실패합니다. [대담] 및 [이탤릭체]는 모든 다른 사람들이 잘, 그냥 [스포일러] 일을하고 내가 브라켓 –

+0

-1 있기 때문에 이것이 생각하기 때문에 현재의 형태로,이 질문은 "추측의 게임을 우리에게 요구하고있다 내 codez 무엇입니까 ". – goat

답변

1

있습니다 d는과 같이 괄호를 탈출 : 정규 표현식

showSpoiler\(this\) 

테이크 케어, 그들은 당신이 디버깅을 더 많은 기능을 추가하지 않는 한 디버깅에 자신의 하드에 언어가 있습니다 (예를 들어, 일치 된 것, 출력 된 것 등).

BTW 당신은 ​​여러 검색을 실행하고 직접 함수에 배열을 전달하여 작업을 대체 할 수 있습니다. 당신은 그들을 반복 할 필요가 없습니다.

그래서 더 나은에 대한 preg_replace 다시 매뉴얼 페이지를 읽고 더 쉽게 패턴을 디버깅 할 수있는 방법을 기대합니다. 예 : 기능과 유사한 것으로 그들을 넣기 전에 그들을 테스트하십시오.

+0

감사합니다 !!! 해결 된 –