2017-12-05 5 views
0

그래서 preg_replace를 사용하여 PHP 게임에서 사용자 이름에 @ 태그를 만들려고했습니다. 여기 사용자 이름에 @ 태그를 만들려고 시도했습니다.

내 코드입니다 :

$find[13] = '@'; 
$replace[13] = '<a href="profil.php?username=$1">'; 

return preg_replace($find,$replace,$text); 

난 단지이 경고 메시지를 얻을 :

Warning: preg_replace(): No ending delimiter '@' found in C:\xampp\htdocs\mafiagamev2\functions\bbcodes.php on line 61 

어떤 도움을?

+1

'preg_replace()'는'str_replace()'가 아닙니다. 전자는 정규 표현식이 필요합니다. 후자는 간단한 정적 문자열이 필요합니다. –

+0

'preg_replace ('/ @ /', ' – splash58

+0

내가 본다 ..하지만 다시 입력을 얻으려면/@/어떻게 보일까? 내 BB 코드에있다 :'~ \ [ytb \] . *?) \ [/ ytb \] ~ s '; 그렇다면. *?를 사용하지만 이것을 @에 쓰면 작동하지 않습니다 .. 이렇게 :'/@.*?/ ' –

답변

0

문제는 preg_replace() 검색 문자열로 정규 표현식을 필요로한다는 것이다. 대부분의 프로그래밍 언어는 정규식을 가지고 있지만 PHP는 아닙니다. 여기서 패턴을 둘러싸는 구분 기호를 사용하여 패턴을 문자열로 정의합니다. 기본적으로 @을 포함하여 대부분의 영숫자를 사용할 수 있지만 가장 일반적으로 사용되는 문자는 /입니다. 따라서 preg_replace은 구분 기호로 묶인 패턴을 기대하며 PHP는 여는 구분자로 해석합니다.

당신이 원하는 것은 @으로 시작하는 모든 단어를 링크로 바꾸는 것입니다. 이 정규 표현식의 많은 부분은 사용자 이름의 유효성 검사 방식에 달려 있습니다. 예를 들어 당신은 대문자와 소문자 알파벳 문자, 숫자, 하이픈을 허용하고 밑줄 가정입니다 : 당신이 죽은 링크를 많이 생성 할 수 있습니다

preg_replace('/(^|\s)@([\w\d-_]+)/g', '<a href="profil.php?username=$2">$2</a>') 

Get the explanation and try it out

참고. 입력 중에 자바 스크립트를 사용하여 유효성을 검사하거나 사용자 이름을 확인하여 데이터베이스를 바꿀 것을 제안합니다.

+0

이 문제는 제가 해결책에 더 가깝습니다! 예를 들어 @ username을 쓰면 echo의 @ 사용자 이름과 링크가 profil.php? username = @ username이됩니다. @가 echo'd가되지 않아서 profil.php 링크로 리디렉션되는 어떤 방법이 있습니까? username = username? –

+0

아, 물론. 내 실수 너는 @ sing의 오른쪽에있는 성냥을 위해 여는 괄호를 움직여야 만한다. 그래서 그것은 b가되지 않을 것이다. e는 경기에 포함됩니다. 나는 대답을 업데이트했다. – masterfloda

+0

우리가 간다, 감사합니다. @masterfloda! :) –

관련 문제