2017-04-15 2 views
1

편집 : 정규식/않는 str_replace : MAILTO과 웃는 조합 문제

사용자 [email protected] 들어가면 보이는 결과가된다 :

[email protected]" class="small">[email protected] 

그러나 사용자가 메일 들어가면 @ example.no를 사용하면 표시되는 결과는 [email protected]가되고 링크가됩니다. 사용자가 링크를 클릭하면 자신의 컴퓨터에 로컬 전자 메일 프로그램을하라는 메시지를 수신자 필드는 자동으로 채워 [email protected]


에 문제 나는 데입니다

사용자가 서로의 페이지에 댓글을 쓸 수있는 사이트에서 작업하고 있으며 str_replace와 regex를 사용하여 URL을 클릭 가능한 URL, 해시 태그를 '클릭 가능한 해시 태그', 스마일 코드 (: P, : S, : D)

그러나 전자 메일을 preg_replace가있는 mailto로 변환하려고하면 "tongue"-smiley (: P)을 나누기 : 사용자가 "P"문자로 흔한 휴식을 시작하는 이메일을 입력하고 기본적으로 내가 망 해요

// MAILTO 
$text = preg_replace('/(\[email protected]\S+\.\S+)/', '<a href="mailto:$1" class="small">$1</a>', $text); 

// SMILEY 
$text = str_replace(':P', '<img src="images/smileys/tongue.png" class="smiley" alt=":P" />', $text); 

합니다.

문자열 입력 :

<a href='mailto:[email protected]'>[email protected]</a> 

가된다 :이 에게 이 에게 가 하나 확실한 해결책이 웃는 코드를 변경하는 과정이다

<a href='mailto[SMILEY][email protected]'>[email protected]</a> 

(: P) 다른 뭔가로를, 또는 간단하게 만들 수 없습니다 클릭 가능한 전자 메일. 그러나 ": P"는 사용자가 널리 사용하고 사용하므로 사용자 경험의 문제입니다. 또한 나는 ": S"등과 같은 다른 스마일을 가지고 있는데, 이렇게 간단하고 실용적인 해결책을 찾고 싶습니다.

도움이 될 것입니다.

+0

는 예, 입력과 예상 출력 게시물을 업데이트하시기 바랍니다. –

+0

고마워요, 지금 예제를 추가했습니다 – kimnthorstensen

+0

이것을'[email protected] : p'라고하고 href 속성에 들어오는': p' 대신에': p'를 끝내고 싶다고합시다. 맞아? –

답변

1

Try this code snippet here

정규식 :/(?<!mailto):(?:P|p)/이 표현은 일치 :p 또는 :P 앞에 아무 mailto 단어가없는 경우 말했다. 대신이의

:

$text = str_replace(':P', '<img src="images/smileys/tongue.png" class="smiley" alt=":P" />', $text); 

사용이 :

$text= preg_replace('/(?<!mailto):(?:P|p)/', '<img src="images/smileys/tongue.png" class="smiley" alt=":P" />', $text); 
+0

이것은 나쁜 상황을 더 나쁜 것으로 바꾸고 있습니다. 기본적으로 이메일 주소는 일반 텍스트 여야하며 HTML로 취급되지 않습니다.kimnthorstensen이해야 할 일은 이메일 주소의 html에 스마일 코드를 적용하지 않는 것입니다. –

+0

@KIKOSoftware 나는 OP가 언급 한 특정한 경우를 취했다. 나는 downvote가 필요하다고 생각하지 않는다. OP의 의견을 살펴보십시오. 그 사람이 정확히 무엇을 찾고 있는지 당신에게 설명 할 것입니다. –

+0

예, 있습니다. 다른 나쁜 코드로 잘못된 코드를 복구하는 것은 도움이되지 않습니다. 이것은'mailto : p'에서 작동하지만 스마일리가있는 다음 문제가 언제 발생합니까? 그걸 수리 해? 아니! 질문은 불완전하므로 좋은 대답을 공식화 할 수 있습니다. 약간 더 나은 대답은 아마도 다음과 같을 것입니다. 이메일 코드 앞에 스마일을하십시오. 간단히 바꾸면 문제가 더 이상 발생하지 않습니다. –