2010-04-25 2 views
0

뉴스 항목 (제목, 기사, URL)의 입력을 허용하는 웹 앱을 만들고 있습니다. 나는 두 개의 다른 페이지, 즉 preview.phpsend.php, 모두가 등등페이지가 이메일로 전송 될 때 공백 또는 % 20 링크가 + 기호로 바뀝니다.

News 
4/25/2010 

Title 1 
[URL 1] 
Article 1 

Title 2 
[URL 2] 
Article 2 

및 ...

: 그것은과 같이 지정된 날짜에 대해 입력 된 모든 뉴스 항목의 요약을 생성하는 페이지 news.php있다 그 중 file_get_contents() 호출을 통해 news.php를 호출하십시오.

URL에 공백이 있으면 예외는 아닙니다. 미리보기 중에 URL이 열립니다 (FF : 공백, Chrome : 공백 % 20). 그러나 전자 메일로 수신되면 보내기 도중 공백이 + 기호로 변환되기 때문에 URL이 열리지 않습니다. FF에서

  1. 미리보기 : 예를 들어

    http://www.example.com/this%20is%20the%20link.html

  2. 은 두 브라우저에서 이메일로 조회 : http://www.example.com/this+is+the+link.html
http://www.example.com/this는 link.html 크롬에서
  • 미리보기입니다

    # 3 만 일 (링크가 열리지 않음).

    미리보기에는 URL의 공백이 정확합니까 (공백 또는 % 20), 이메일에 수신되면 부정확합니까 (+)? 같은 news.php에서 동일한 페이지가 실제로 생성되는 이유는 무엇입니까?

    어떤 도움을 주시면 감사 :


    편집 :

    preview.php :

    $HTML_version = file_get_contents('news.php'); 
    echo $HTML_version; 
    

    send.php

    $HTML_version = file_get_contents('news.php'); 
    $body = "$notice_text 
    
    --$mime_boundary 
    Content-Type: text/plain; charset=us-ascii 
    Content-Transfer-Encoding: 7bit 
    
    $TEXT_version 
    
    --$mime_boundary 
    Content-Type: text/html; charset=us-ascii 
    Content-Transfer-Encoding: 7bit 
    
    $HTML_version 
    
    --$mime_boundary--"; 
    //some other code here to send the email 
    

    news.php :

    <a href="<?php echo $url ?>">attachment</a> 
    //the $url there contains spaces 
    
  • +1

    일부 코드 없이는 말하기가 어렵습니다. –

    +0

    일부 코드를 추가했습니다. – Obay

    답변

    1

    어떤 메일 클라이언트를 사용하고 있습니까? 메일 클라이언트의 HTML 처리에는 극한의 제한과 버그가 있습니다.

    <a href="<?php echo $url ?>">attachment</a> 
    //the $url there contains spaces 
    

    URL은 정의에 따라 공백을 포함하지 않습니다.

    <a href="x y.z"> 
    

    브라우저는 일반적으로 x%20y.z로 인코딩하여 사용자의 오류를 해결합니다 : 당신은 HTML의 링크에 공백을 포함합니다. 그러나 이것은 표준화 된 동작이 아니므로 이에 의존해서는 안됩니다.그것은 아마도, 어떤 dodgy 메일 클라이언트가 URL의 경로 부분에 이 아니기 때문에 x+y.z 대신에 x+y.z으로 오인 될 수 있습니다.은 공백을 의미합니다.

    URL 인코딩에 rawurlencode()을 사용하십시오. 이 함수를 사용하면 공백이 %20으로 변환되어 URL 경로 부분 쿼리 문자열에 적합합니다. 오해의 소지가있는 PHP urlencode() 함수는 대신 +으로 인코딩됩니다. 이는 쿼리 문자열의 양식 데이터에만 적합합니다.

    문자열을 HTML로 출력 할 때마다 언제든지 htmlspecialchars()을 사용해야합니다.

    $name= 'this is the link'; 
    $url= 'http://www.example.com/'.rawurlencode($name).'.html'; 
    
    <a href="<?php echo htmlspecialchars($url); ?>">link</a> 
    
    +0

    매우 도움이되는 녀석! 감사합니다. Gmail과 Lotus Notes에서 테스트를 마치고 똑같이 작동합니다. 어쨌든 URL이 각 뉴스 항목마다 다르므로 rawurlencode()를 사용할 수 없다고 생각합니다 (예 : 공통 기본 URL 없음). 난 그냥 수동으로 str_replace ('', '% 20', $ url)라고 생각합니다. 다른 주석가가 아래에서 지적했듯이, 공간을 변환하는 것으로 충분할 것입니다. 그렇게 생각하니? 아니면 다른 캐릭터에 대해서도 걱정해야합니까? – Obay

    +1

    URI에는 유효하지 않은 다른 문자가 많이 있습니다 (예 :''<{} | \^~ []'), 역 따옴표, 제어 문자 및 모든 ASCII 문자가 아닌지 걱정하지 않아도됩니다. 누군가가 당신에게 "URL"을 보낸다면 누군가가하고있는 일을 모른 채 무작위로 문자열을 붙이는 것처럼 들리므로 다른 캐릭터가 걱정할 수도 있습니다. – bobince

    2

    + 표시는 공백이나 % 20의 기존 대체품이므로 제대로 작동해야합니다. 이후 그들은 당신이 수동으로 URL의 모든 공백을 % 20 (으)로 변환 할 것을 권합니다. 문제를 해결해야합니다.

    +0

    나는 이것을 시험해 보겠습니다. 위의 수정 사항을 추가했는데 체크 아웃 해 주시겠습니까? – Obay

    +0

    고마워, 너의 제안이 효과가 있었어! 그러나, 나는 생각했다, 나는 또한 수동으로 다른 문자를 % 카운터 파트로 변환해야한다. 공간과 같은 다른 문자가 % 무언가로 변환되는 이유는 무엇입니까? 이게 뭐라 불리는 지 알아? Google에 가서이 모든 문자의 목록을보고 싶습니다 ... – Obay

    +2

    URL에 매개 변수가 포함되어 있으면 rawurlencode를 사용하여 인코딩해야합니다. http://www.php.net/manual/en/function.rawurlencode.php . 이 URL을 전체 URL에 사용하지 마십시오. 이것으로 당신은 단지 공백 문자를 인코딩하는 것만으로도 안전해야합니다. –

    관련 문제