2009-06-11 16 views
1

두 줄의 코드와 함수를 쉽게 구현할 수 있다고 생각했지만 실패로 판명났습니다.BBCode, preg_replace 및 명명 된 캡처 그룹

내 웹 페이지에서 [text]1[/text]을 입력 할 수 있기를 원하며 그 ID의 제목을 찾으십시오.

function textFormat($text) { 
    $raw = array(
     '\'\[text\](?P<id>.*?)\[/text\]\'is' 
    ); 

    $out = array (
     '<a href="index.php?function=getData&reference=text&id=$1">' . getTextTitle() . '</a>' 
    ); 

    preg_replace($raw, $out, $text); 
    return $text; 
} 

function getTextTitle($id) { 
    $sql = mysql_query("SELECT title FROM text WHERE id = $id"); 
    return mysql_result($sql); 
} 

그래서, 여기에 사랑스러운 작은 문제는 다음과 같습니다 하나 말할 수있는, 내가 인용 부호로 훌륭한 작품을 숫자라는 제목의 변수와 함수를 호출 합니다만, 우리가 아는 한, PHP는하지 않습니다 그런 식으로. 그래서, 나는 지명 된 그룹을 선택했다. $regs['id']을 사용하면 작동하지 않습니다.

내가 잘못 했나요?

내가 잘못 생각하고 있습니까?

+0

HTML에서 허용하는대로 태그를 반환하기위한 것이지만, PRE의 약간의 펑키를 사용하면됩니다. 혼란이 생겨서 죄송합니다. –

답변

1

글쎄, 당신은 분명히 내가 생각했던 것보다 근본적으로 다른 방식으로하고있다. 그러나 나는 너가 시도하고있는 것과 너무 멀지 않은 것이 아마도 효과가있을 것이라고 생각한다. 이 시도 :

function textFormat($text) { 
    $raw = array(
     '\'\[text\](?P<id>.*?)\[/text\]\'ise' 
    ); 
    $out = array (
     '\'<a href="index.php?function=getData&reference=text&id=$1">\' . getTextTitle(\'$1\') . \'</a>\'' 
    ); 
    preg_replace($raw, $out, $text); 
    return $text; 
} 

function getTextTitle($id) { 
    $sql = mysql_query("SELECT title FROM text WHERE id = '" . mysql_real_escape_string($id) . "'"); 
    $res = mysql_result($sql); 
    $row = mysql_fetch_array($res); 
    return $row ? $row[0] : 'invalid ID'; 
} 

원래 getTextTitle() 것, 뭔가 다른 내가가는하지 않는 한, 사람이 그런데 그들이 SQL 주입을 통해 데이터베이스에 좋아하는 것도, 할 수 있도록 잘 모르는 것 같아요. 천만에요.

또한, 나는 (?P<id> 노이즈가 정규식에서 무엇인지 모르겠다. 그래서 나는 그것이 어떤 이유로 필요하다고 생각하고 그것을 내버려두고있다. 이것이 올바른지 나는 모른다.

+0

(? P <id>은 명명 된 그룹이기 때문에 $ regs [ 'id']로 반환됩니다.이 작업은 분명히 작동하지 않습니다. 보안 문제에 관해서는 고맙습니다. 이미 관리자 만이 [text] $ num [/ text]를 사용할 수 있도록 보장함으로써 시스템을 수정했습니다. 다른 방법으로 캡처 그룹이 (. *) 대신 (\ d +?) ?). 당신은 당신이 그것에 접근하는 방법이 아니라는 것을 언급했다 - 나는 호기심을 느낀다, 어떻게 그럴 예정입니까? –

+0

또한 고마워요.이 코드는 현재 작동하고 있습니다 만, 스크랩을해야만합니다. $res = mysql_result($sql); $row = mysql_fetch_array($res);이 모든 작업이 수행되었습니다. 엄청난 양의 오류가 발생했습니다. 나는 return $row을 $ res라고 변경했지만, 그 경우에는 "유효하지 않은 ID"만 반환합니다. –

관련 문제