2013-02-12 2 views
3

PHP로 폴더의 파일 이름을 일괄 적으로 변경하려고합니다. 악센트 부호가있는 문자에 문제가 있지만 대부분 작동합니다.PHP 파일 이름 인코딩 변환 문제

악센트 부호가있는 파일 이름의 예는 ÅRE_GRÖN.JPG입니다.

해당 파일의 이름을 ARE_GRON.JPG으로 변경하고 싶습니다. 내가 파일을 읽을 경우,이 같은

:

<?php 
$path = __DIR__; 
$dir_handle = opendir($path); 

while ($file = readdir($dir_handle)) { 
    echo $file . "\n"; 
} 

closedir($dir_handle); 

... 그리고 페이지가 표시 AÌŠRE_GRÖN.JPG.

스크립트의 시작 부분에 header('Content-Type: text/html; charset=UTF-8');을 추가하면 올바른 파일 이름이 표시되지만 rename() 기능은 아무런 영향을 미치지 않습니다. 여기

내가 무엇을 시도했다입니다 : 어디에서 잘못 가고

while ($file = readdir($dir_handle)) { 
    rename($file, str_replace('Ö', 'O', $file)); # No effect 
    rename($file, str_replace('Ö', 'O', $file)); # No effect 
} 

?


내가 작업에 잘못된 도구를 사용한다고 판단되는 경우 말하십시오. 누구든지 Bash 스크립트로 이것을 달성하는 방법을 알고 있다면 보여주십시오. 나는 배쉬 껍질이 없다. 당신이 교체 할 문자의 수를 제한하는 경우

+0

Windows 또는 Linux에 있습니까? – hek2mgl

+0

PHP 스크립트가 UTF-8로 인코딩 되었습니까? –

+0

그가 bash를 말했기 때문에 나는 Lunix를 제안 할 bash (1)를 언급하고 있다고 생각할 것이다. –

답변

1

나는 어떻게하는지 알아 냈다.

먼저 파일 이름에 urlencode()을 실행했습니다. 친화적 인 URL에

MÖRKGRÅ.JPG 

:이 문자열을 변환

MO%CC%88RKGRA%CC%8A.JPG 

나는 다음 배열에 바늘과 건초 더미를 제공하는 URL 인코딩 된 문자열에 str_replace() 달렸다.

<?php 

header('Content-Type: text/html; charset=UTF-8'); 

$path = __DIR__; 

$dir_handle = opendir($path); 

while ($file = readdir($dir_handle)) { 
    $search = array('A%CC%8A', 'A%CC%88', 'O%CC%88'); 
    $replace = array('A', 'A', 'O'); 
    rename($file, str_replace($search, $replace, urlencode($file))); 
} 

closedir($dir_handle); 

작업이


: 다 나는이 내가 예상했던 것보다 더 다재다능 실현하기 위해 왔어요 : 내 솔루션이처럼 보였다 그래서 나는 단지 몇 스웨덴어 문자를 필요로했다. 다른 스크립트 인 url_encode()을 실행하면 약간 다른 출력이 나오지만 적절하게 변경하는 것은 쉽습니다.

$search = array('%26Aring%3B', '%26Auml%3B', '%26Ouml%3B', '+'); 
$replace = array('A', 'A', 'O', '_'); 
0

, 당신은 당신이 더 일반적으로 악센트 모든 A-등을 대체 할

expr="" 
for char in {A..Z} 
do 
    expr+="s/[[=$char=]]/$char/g; "; 
done; 

for f in *; do 
    mv "$f" "$(sed -e "$expr" <<< "$f")" 2> /dev/null; 
done 

를 사용할 수 GNU에

for f in *; do mv "$f" "${f//Ö/O/}" 2> /dev/null; done 

와 함께 할 수 있습니다 ascii A를 가진 문자들, 알파벳의 모든 문자들에 대해, 그러나 OS X sed에 대해서는 아무런 보장이 없다. 모든 파일 이름을 대문자로 사용하는 부작용이 있음을 유의하십시오.

+0

음 .. 파일을 보유하고있는 디렉토리에서 첫 번째 스크립트를 실행 해 보았지만 효과가없는 것 같습니다. –

+0

'ls' 파일을 제대로 보여줍니까? –

+0

예, 그렇습니다. –