2013-01-04 2 views
0

아마 작을 지 모르지만 아래 코드를 사용하여 디렉토리 내부의 파일을 읽고 자체 하이퍼 링크로 인쇄합니다.PHP는 공백이있는 파일 이름을 기반으로 하이퍼 링크를 자동으로 생성합니다.

전체 파일 이름을 인쇄하지만 첫 번째 공백까지의 문자 만 사용하여 불완전한 하이퍼 링크를 만듭니다. 문제는 파일에 공백이있는 함수 하이퍼 링크를 만드는 방법입니다.

$dir = '.'; 
$dh = opendir($dir); 
$file_count = 0; 
while (false !== ($file = readdir($dh))) { 
    $files[] = $file; 
    $file_count += 1; 
    echo $file; 
} 
for ($x = 0; $x < $file_count; $x += 1) { 
    echo "<a href=$files[$x]>" . "$files[$x]" . "</a><br>"; 
} 
+0

http://php.net/urlencode - 당신은 (URL/URI)를 하이퍼 링크를 작성하는 경우, 규칙을 따르지 않으면 말하고자하는 브라우저와 다른 언어로 말하고 있습니다. 조심해. 그리고 HTML을 출력 할 때 유효한 HTML을 만들어야합니다. http://php.net/htmlspecialchars주의하십시오. – hakre

답변

0

당신은 앵커 태그 내부의 HREF 속성에 따옴표를 추가 할 수 있습니다

echo "<a href='$files[$x]'>$files[$x]</a><br>"; 

클라이언트는 공간에 다음과 같은 파일 이름의 일부가 다른 속성 생각 할 수있다. 당신은 확장자를 지정할 수 있습니다 glob();

foreach (glob("*.*") as $filename) { 
     echo "<a href=\"$filename\">$filename</a> <br>"; 
} 

사용해보십시오

+0

작은 따옴표가 트릭을했습니다. 감사! – AverageGuy

+1

공백이 아닌 작은 따옴표가 포함 된 파일 이름이 있어야만 ... - 똑같은 이유로 동일한 문제가 두 번째로 발생합니다. 실제로 필요한 것은'urlencode '입니다. 다음 요청에서 유지하고자하는 파일 이름의 특수 문자. – hakre

+0

@hakre - 네 말이 맞아. 가장 안전한 방법은 아마도 ''는 HTML이 아닌 안전 문자와 비 URL 안전 문자를 처리합니다. – dethtron5000

1

(당신은 또한. href 속성 내부의 파일 이름을 탈출를 htmlentities()를 사용할 수 있습니다), 또는 내가 *.*을 지정한 것을이 모두 표시됩니다 파일을 자신의 하이퍼 링크에 저장합니다.

+0

이 방법을 사용하겠습니다. 훨씬 더 간단합니다. 감사! – AverageGuy

+0

하지만 질문을하는 이유 때문에 HTML이 손상 될 수 있습니다. 문제는 디렉토리 목록을 가져 오지 않고 출력하는 것입니다. 작업을 마친 후에는 디렉토리 목록을 가져 오는 방법을 향상시킬 수 있습니다. – hakre

2
$dir = '.'; 
$dh = dir($dir); 
while (FALSE !== ($file = $dh->read())) 
{ 
    if ('.' !== $file[0]) // ignore any entry that begins with a '.' 
     echo "<a href='" . urlencode($file) . "'>". $file . "</a><br />\n"; 
} 
$dh->close(); 
2

는 이미 위의 코멘트에 urlencodehtmlspecialchars의 사용을 제안했다.

나는 또한 귀하의 경우에는 사용하기가 매우 편리하기 때문에 당신이 FilesystemIterator를 사용하는 것이 좋습니다 :

$dir = '.'; 
$files = new FilesystemIterator($dir); 

foreach ($files as $path => $fileinfo) { 
    $name = $fileinfo->getBasename(); 
    $url = urlencode($name); 
    $label = htmlspecialchars($name); 
    printf("<a href=\"%s\">%s</a><br>\n", $url, $label); 
} 
+2

+1, 당신은 항상 저에게 새로운 것을 가르쳐줍니다! –

관련 문제