문제

다음을 수행 할 때마다 다음을 발견했습니다.

echo '<a href="http://" title="bla">huzzah</a>';

다음은 브라우저로 렌더링됩니다.

<a href="http:///" title="bla">huzzah</a>

이것은 링크를 깨뜨리기 때문에 확장자가있는 파일에 링크 할 때 특히 성가신 일입니다.

왜 이런 일이 일어나고 있는지, 어떻게 고칠 수 있습니까?

업데이트:내 정확한 구현에 대해 묻는 사람들을 위해 여기에 있습니다. 내 문제 해결에서 나는 가능한 한 많이 멍청 했으므로 평범한 텍스트를 평범한 텍스트에 연결하는 곳은 신경 쓰지 마세요 ...

function print_it($item) {
    echo '<div class="listItem clearfix">';
    echo '<div class="info">';
    echo '<span class="title">';
    if(isset($item[6])) {
        echo '<a href="http://" title="">' . 'me' . '</a>';
    }
    echo '</span>';
echo '</div></div>';
}

업데이트:Matt Long에 대한 응답으로, 나는 당신의 줄에 붙여서 동일하게 만들었습니다.

업데이트:Fire Lancer에 대한 응답으로, 나는 원래의 시도를 다시 시작했으며 아래를 모두 보여줄 것입니다.

echo substr($item[6],13) . '<br>';
echo '<a href="http://' . substr($item[6],13) . '" title="' . $item[0] . '">' . $item[0] . '</a>';

<span class="title">www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html<br>
<a href="http://www.edu.gov.on.ca%2Feng%2Ftcu%2Fetlanding.html" title="Employment Ontario">Employment Ontario</a></span>

기판의 이유는 URL이 다른 곳에서 rawurlencode ()를 통해 실행되고 HTTP%3A%2F%2F에 연결되면 페이지가 로컬/상대 링크라고 생각합니다.

업데이트:나는 실제로 보지 않고 위의 응답을 붙여 넣었다. 따라서 HTML은 소스를 볼 때 정확하지만 실제 페이지는 이후에 다른 후행 슬래시와 해석합니다.

해결책:이것은 모두 rawlurlencode ()의 결과였습니다. 디코딩하거나 인코딩을 모두 함께 건너 뛰면 모든 것이 완벽하게 작동했습니다. RawUrlenCode ()에 관한 내용은 브라우저가 트레일 링 슬래시를 붙이고 싶어합니다.

도움이 되었습니까?

해결책

Firefox는 특히 HTML 소스가 보는 방식을 보여줍니다. 링크에 대해 분명히 또는 컨텍스트가 브라우저가 후행 슬래시를 해석하게 만드는 것입니다.

URL 인코딩의 부작용인지 궁금합니다. 당신이 rawurldecode가 도움이 될 것입니다. 인코딩을 유지 해야하는 URL의 일부가 있으면 슬래시를 검색하고 다시 넣을 수 있습니다.

다른 팁

나는 그것을 가졌던 적이 없다. 링크를 얼마나 사기에 반향하고 있습니까? 다음은 모두 작동해야합니다.

echo '<a href="http://someothersite.com">Link</a>';
echo '<a href="anotherpage.php">Some page</a>';
echo '<a href="../pageinparentdir.php">Another page</a>';
etc

정보를 추가했기 때문에 편집하십시오.

http : // href로 http : //를 가질 수는 없으며, 해당 링크를 HTML 페이지에 직접 입력하면 그 효과가 있습니다. 예 :
HTML :

 <a href="http://" title="bla">huzzah</a>

링크 (FF3) :

http:///

오류는 다른 곳에 있어야합니다. echo 문자열을 작성합니다. 어떤 부분에서도 사후 처리가 수행되지 않습니다. 따라서 추가 슬래시는 코드의 다른 곳에 추가됩니다 (문자열을 전달하기 전에 echo).

이중 인용문을 사용하고 이와 같은 내부 이중 인용문을 피하면 동일한 결과를 얻습니까?

echo "<a href=\"http://\" title=\"bla\">huzzah</a>";

해당 Echo 명령을 내 PHP 코드에 넣으면 예상대로 "http : //"를 출력합니다 (생성 된 출력 소스에서 볼 수 있음). ), 이것은 보여준다 http : ///.

내 생각에, 호스트 이름이나 IP 주소가없는 http : // 링크가 없기 때문에 브라우저 동작이라고 생각합니다 (프로토콜에만 액세스 할 수 없습니다).

일부 사람들이 지적했듯이 'http : //'는 유효한 링크가 아니므로 브라우저는 마지막에 추가 슬래시를 추가합니다. 이를 보려면 Lynx -Dump를 사용해보십시오 http : //yourdomain/yourfile.php (Linux를 갖기에 충분히 운이 좋으면) 또는 Port 80의 상자에서 서버로 텔넷을 입력하고 다음을 입력하십시오.

GET /path/file.php HTTP/1.0

그리고 결과를보십시오.

PHP 구성 설정을 살펴 보셨습니까? Magic_Quotes_GPC 일 수 있습니다. 꺼져 있는지 확인하고 다시 반영하십시오 (php.ini 파일을 편집하거나 추가해야 할 수도 있습니다. php_flag magic_quotes_gpc off 환경에 따라 작업중인 디렉토리의 .htaccess 파일에).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top