2012-06-20 3 views
0

나는 뉴스 레터 응용 프로그램을 쓰고 있어요 내가그들을 보내기 전에 PHP에서 뉴스 레터의 html 링크를 수정하는 방법?

<a href="http://whateverclientsite.com/">blah</a> 

같은 검색 링크가

<a href="http://mysite.com/redirect.php?utm_source=Emails&utm_medium=MyNewsletterSubject&utm_campaign=MyNewsletterCampaign&eid=123123&mailid=234234&url=http://whateverclientsite.com/>blah</a> 

내 리디렉션되도록 뉴스 레터처럼 변경 클라이언트에 나타날 수있는 사용자 정의 링크를 확인해야합니다. php는 몇 가지 Google Analytics 코드가있는 페이지가 될 것이므로 (뉴스 레터가 생성하는 링크 클릭 수를 추적 할 수 있도록) 사용자 정의 URL http://whateverclientsite.com으로 리디렉션됩니다.

뉴스 레터를 보내기 전에 변경해야하기 때문에 클라이언트 측 javascript가 아닌 PHP에서이 링크 다시 작성을해야합니다.

제가 여기서 찾고있는 것은 URL 재 작성을위한 코드입니다. Google에서 이미 작동하고있는 것들입니다. 상당히 간단한 정규식 연산이되어야하지만 정규식 기술은 빠릅니다.

내가이 작업을 진행하면 어떤 답변에 오기 전에 내가 다시 게시 할 예정입니다

추신 :. 또한 나는 그들이 다시 작성되지 않도록 특정 URL과 이미지 태그를 걸러 낼 필요가있다. 예를 들어 mysite.com에 대한 링크는 다시 작성하면 안됩니다.

추신 전체 뉴스 레터는 처리해야 할 때까지 PHP 문자열로 존재합니다. 그래서
$newsletter = rewriteurls($newsletter, $url_exceptions_array);
내가 생각하고있는 함수 호출입니다. 그래서 제 질문은 어떻게 rewriteurls()를 정의해야합니까?

+0

방금 ​​물어 본 내용이 없습니다. "그런 식으로 변경"부분에는 세부 사항이 전혀 없습니다. – Amadan

+0

죄송합니다. 표시되지 않았습니다. 편집하려고합니다. –

답변

1

URL 형성 규칙은 매우 복잡합니다 (rfc). 그리고 html 속성도 복잡합니다. 당신이 리콜에 대한 절충을 꺼리지 않는 경우에, 여기 당신이 :

$new_url = preg_replace(
    '@href=(?:\'|")?(?P<url>[\w?&=+/%#.:-]*)(?:\'|")[email protected]', 
    'href="redirect.php?u=$1"', # replace this with desired wrapper 
    $your_feed); 

이 기능에 실패 : 잘못된 제도 (같은 abbbc://this.is.invalid.url)는 잘못된 태그 (<link href=...), 공간 (href =)하지만 매우 아니다 이러한 경우가 발생할 가능성이 높습니다. 그렇다면 누락 된 내용을 보완하기 위해이 정규식을 향상 시키십시오.

이 정규식의 구성 요소를 살펴 보겠습니다. 다음은 사용할 수 없습니다.

@ <-- delimiter 
    href=(?:\'|")? <-- href=' or href=" or href= 
    (?P<url> <-- capturing part 
    [\w?&=+/%#.:-]* <-- a-zA-Z0-9_?/=+%#.:-& from zero to infinity times 
) 
    (?:\'|")? <-- close href value 
@i <-- delimiter, case insensetive modifier. HREF will work too 
+0

방금 ​​예외 판을 보았습니다. 예외 ('http : // yoursite.com')에서 호스트를 잘라 내고'preg_match ('/'. implode ('|', $ exceptions). '/ i', $ text);' – madfriend

+0

재미 있고 간단한 하지만 나는 그 preg_match가 위의 작업과 함께 작동하는지 확신하지 못합니다. –

관련 문제