2014-07-06 5 views
1

올바른 질문을하고 있는지 확실하지 않습니다. 이 코드가 있습니다 :링크의 자바 스크립트에서 특수 문자를 이스케이프 처리합니다.

$content = rawurlencode(file_get_contents("c://Server/www/Codice/LOGS/".$user."/".$file)); 
$thelist .= "<li class=files><a href=javascript:alert('".$content."') class=filelink>".$file."</a></li>"; 
echo $thelist; 

내가 원하는 것은$content (실제로는 테스트, 내가 함수에 인수로 $content을 사용할 것입니다) 을 경고하는 것입니다 그러나 이것은 내가 원하는 것입니다 내가 링크를 클릭하면. 어떻게해야합니까?

파일이 간단한 txt 파일 인 경우 제대로 작동합니다. 하지만 여기에서 사용하는 파일은 문자가 포함 된 C++ 프로그램입니다. >, 분명히

+0

이 '경고'예제에 따라 실제로하고 싶은 것을 말하기는 어렵습니다. 하지만 아마도 encodeURI() 또는 encodeURIComponent() 중 하나가 필요합니다. – Arnauld

+0

@Arnauld 내가 어떻게 그 코드를 PHP로 작성했는지 알지 못했습니다. 당신이 볼 수 있듯이 rawurlencode()를 사용해 보았습니다. urlencode()도 시도했습니다. –

답변

2

먼저 파일 내용을 가져와야합니다. $user$file에 예기치 않은 문자 (예 : "../")가 없어 지정된 디렉토리 외부로 이동해야한다는 점을 제외하고는 매우 간단합니다. 사용 예 preg_match() :

if (!preg_match ('/^[\w\d]+$/', $user) || 
    !preg_match ('/^[\w\d]+$/', $file)) { 
    /* Error */ 
    return; 
} 
$content = file_get_contents("c://Server/www/Codice/LOGS/".$user."/".$file); 

다음으로 내용을 유효한 자바 스크립트 문자열로 변환해야합니다. 이렇게하려면 백 슬래시, 더블 또는 단일인용줄 끝 (U + 2028U + 2029 포함) 문자를 이스케이프해야합니다. 나는이 작업을 수행하는 가장 쉬운 방법은 json_encode()을 사용 믿습니다

$code = json_encode ($content); 

합니다 (javascript: 부분 후) 코드 기술적으로 URL이 rawurlencode()으로 탈출 할 수는있다 있도록되어

$href = 'javascript: ' . rawurlencode ("alert ($code)"); 

href (또한 파일 이름)은 htmlspecialchars()으로 적절하게 이스케이프 처리하여 HTML 속성으로 사용되어야합니다. 나는 문자열이

$href_h = htmlspecialchars ($href); 
$file_h = htmlspecialchars ($file); 

rawurlencode() 이제 우리는 결과 출력에 마지막으로 준비 후 HTML-안전 때문에 실제로 $href을 위해 생략 할 수 있다고 생각합니다. HTML과 변수를 섞을 때 HEREDOC을 사용하는 것을 좋아합니다.

echo <<<_ 
    <li class=files><a href="$href_h" class=filelink>$file_h</a></li> 

_; 
+0

Omg! 너는 생명의 은인이야! 정말 고맙습니다! 그것이 내가 말할 수있는 전부입니다. 하하 마음이 날아 갔다. –

관련 문제