2017-02-21 8 views
1

파일을 업로드 할 수있는 webform이 있습니다. 이 코드는 PHP 5.2.5 내 로컬 컴퓨터에서 잘 작동하고 PHP 5.2.0로 서버에서 작동하지 않습니다,문자를 바꾼다 'do not work

function createSafeFilenameForQuestion($filename){ 
    $filename = str_replace(" ", "_", $filename); 
    $search = array("ä", "ö", "ü", "ß", "Ö", "Ä", "Ü"); 
    $replace = array("ae","oe","ue","ss","Oe","Ae","Ue"); 
    $ret = str_replace($search, $replace, $filename); 
    $in_charset = mb_detect_encoding($filename); 
    $ret = iconv($in_charset, 'US-ASCII//TRANSLIT', $ret); 
    $ret = preg_replace("/\s/i", "_", $ret); 
    $ret = preg_replace("/[^0-9a-z_\.]/i", "", $ret); 
    $filename = mb_strtolower($ret); 
    return $filename; 
} 
createSafeFilenameForQuestion("ä#`´+4`32 _.png"); 

내 문제가 : 특수 문자 나 사용자가 다음과 같은 기능을 대체합니다.

local output: aeae432__.png 
server output: ae 

문자가 ´ 인 것 같습니다.

+1

는 서버가 mbstring 확장이 설치되어 있는가.? – apokryfos

+2

'mb_detect_encoding()'은 당신이 생각하는 것을하지 않습니다. 사실 기본적으로 쓸모가 없습니다. 또한, iconv ($ in_charset, 'US-ASCII // TRANSLIT', $ ret);와 수동 대체를 모두하는 것은 불필요합니다. /// 어쨌든, 필자의 팁은 파일의 원래 이름에 전혀 신경 쓰지 않는 것입니다. 자신을 임의로 할당하고 다운로드 헤더에서 원래 이름을 사용하십시오. –

답변

0

mbstring가 설치 및 활성화되었습니다. 그러나 Álvarao가 말했듯이 iconv($in_charset, 'US-ASCII//TRANSLIT', $ret);을 사용할 필요는 없습니다. 나는 선을 제거하고 이제는 작동한다.

function createSafeFilenameForQuestion($filename){ 
    $filename = str_replace(" ", "_", $filename); 

    $search = array("ä", "ö", "ü", "ß", "Ö", "Ä", "Ü"); 
    $replace = array("ae","oe","ue","ss","Oe","Ae","Ue"); 
    $ret = str_replace($search, $replace, $filename); 

    $ret = preg_replace("/\s/i", "_", $ret); 
    $ret = preg_replace("/[^0-9a-z_\.]/i", "", $ret); 
    $filename = mb_strtolower($ret); 
    return $filename; 
} 

입력 : AA #은` '+ 4`32는
출력을 _.png : ae432 __ PNG

0

서버에 mbstring 확장이 설치되어 있는지 확인하고 phpinfo();으로 PHP 파일을 만든 다음 실행하여 mbstring이 설치 /로드되었는지 확인하십시오. 가 설치되어 있지 않은 경우

당신은 followinng 명령을 실행하여 설치할 수 있습니다 :

apt-get install php5-mbstring

service apache2 restart

을하고 실행할 수 있도록 :

sudo phpenmod mbstring

이 해결한다 문제.

그러나 당신이 공유 호스팅 서버에있는 경우에 당신이 그것을 가능하게 지원을 호스팅 문의해야합니다 ...