서버 마이그레이션 후 이미지 파일 이름으로 인코딩되는 특수 문자
WordPress 웹 사이트를 Hostgator 공유 호스트에서 Ubuntu Digital Ocean LAMP 스택으로 마이그레이션했습니다.
는 파일 「」의 특수 되었습니다.operários_tarsila-1024x640.jpg
.
WordPress가 파일에 접속하려고 하면 오류가 표시됩니다.원인을 찾았습니다.
Wordpress가 http://mywebsite.com/wp-content/uploads/2013/02/oper%C3%A1rios_tarsila-1024x640.jpg 에 호출을 시도하고 서버가 404 오류를 반환하는 것을 Inspect Element 를 통해 확인할 수 있습니다.
다만, 브라우저에 http://mywebsite.com/wp-content/uploads/2013/02/opera%CC%81rios_tarsila-1024x640.jpg 라고 입력하면, 동작해 이미지가 표시됩니다.
이 할 수 있어요, 이 이라고 할 수 요.á
, 「」로부터의%C3%A1
)á
에서 ~로a
+%CC%81
(액세서리 악센트 조합) 때문에 WordPress에 이미지가 표시되지 않습니다.
. 파일명은, 「 」라고 하는 구조로 되어 있습니다.character
+combining accent
는 "WordPress" 합니다.accented character
배쉬가 비교표를 가지고 전부 이름을 바꿀 수 있는 방법은 없나요?또는 Apache가 이러한 차이를 인식하고 이러한 혼란이 발생했을 때 적절한 파일을 가리키도록 하는 방법?
문제는 새 서버에서 백업을 압축 해제하는 방법인 것 같습니다.
이 문제를 해결하려면 다음 두 가지 방법이 있습니다.
악센트 없이 파일 이름을 수동으로 변경한 다음 데이터베이스를 수정하고 데이터베이스의 파일 이름을 변경합니다(이 maluco는 위험할 수 있으므로 데이터베이스를 백업하는 것이 좋습니다).
Filezilla를 사용하여 파일을 업로드하지만 UTF-8에서 charset 인코딩을 강제하도록 설정합니다.
파일 > 사이트 매니저 > {YOUR SITE} > 탭 문자 집합 > UTF-8 강제 적용
같은 문제가 있습니다.Mac + FileZilla + SK 언어의 특수 문자입니다.
다른 FTP 클라이언트를 사용하여 문제가 해결되었습니다(이 경우는 Cyberduck).
FileZilla 파일명의 엔코핑에 문제가 있는 것 같습니다.강제 utf8 인코딩(FileZilla 호스트 설정)은 도움이 되지 않습니다.
그래서 이 문제와 제게 효과가 있었던 해결책에 대해 말씀드리자면...또한 Wordpress 사이트를 마이그레이션한 결과 파일 이름에 특수 문자가 포함된 모든 이미지가 마이그레이션 후 404를 생성했습니다.
phpMyAdmin을 통해 수동으로 파일 이름 변경 및 데이터베이스 편집을 해야 했습니다.매우 힘들었습니다.먼저 데이터베이스 백업을 권장합니다.
에는 특수 많았습니다.©
파일명을 입력합니다.
먼저, 저는 그 문자를 제거해서 파일 이름을 로컬로 바꿨습니다.나는 1-4a 이름을 사용했다.파일명을 찾아 아무것도(스페이스도) 치환하지 않았다.그런 다음 오래된 파일을 모두 삭제했습니다./wp-content/uploads/
폴더와 새 파일로 교체합니다.
다음으로 데이터베이스로 이동하여 테이블 값을 업데이트했습니다. 파일에는, 「」와「」의 .wp_posts
★★★★★★★★★★★★★★★★★」wp_postmeta
를 참조할 수 있습니다.을 모두 입니다.
update wp_posts set guid = replace(guid,'©','');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '©', '')
WHERE LOWER(RIGHT(meta_value, 5)) = '.jpeg' OR
LOWER(RIGHT(meta_value, 4)) IN ('.jpg', '.gif', '.png')
다시 말하지만, 우리는 아무것도, 심지어 공백도 없이 캐릭터를 대체하고 있다.
모든 섬네일 + 다양한 첨부 파일 크기를 업데이트하기 위해 WP 플러그인 미리 보기 재생성을 사용해야 했지만, 그것이 성공했습니다.
이 투고와 이 투고에 대한 여러분의 노고에 진심으로 감사드립니다!이게 누군가에게 도움이 되길 바라!
PHP 스크립트, Mysql과 HTML에서 동일한 인코딩을 설정해 본 적이 있습니까?
PHP : http://php.net/manual/en/function.mb-internal-encoding.php
Mysql : http://php.net/manual/en/function.mysql-set-charset.php
: HTML :<meta http-equiv="content-type" content="text/html; charset=utf-8" />
이 문제는 이들 언어 간의 문자 집합 대응 문제처럼 보입니다.
이 기능이 작동하지 않으면 다음과 같은 기능을 사용하여 모든 사진의 이름을 변경하는 작은 스크립트를 사용해야 합니다.
function wd_remove_accents($str, $charset='utf-8')
{
$str = htmlentities($str, ENT_NOQUOTES, $charset);
$str = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $str);
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str); // pour les ligatures e.g. 'œ'
$str = preg_replace('#&[^;]+;#', '', $str); // supprime les autres caractères
return $str;
}
출처 : http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html
Wordpress 배치에서 프랑스 문자 사용 시 이와 유사한 문제가 발생했는데, 해결 방법은 Mac에서 FileZilla가 아닌 PC에서 FileZilla로 파일을 업로드하는 것이었습니다.
mac OSX에서 Cent로 업로드하는 경우OS 서버, 파일은 a+%로 호출된 경우에만 표시됩니다.CC%81 포맷
PC에서 파일을 업로드 했을 때 apache가 %C3%A1 형식의 파일을 발견했습니다.그렇게 해서 워드프레스는 파일을 인코딩했습니다.
WP_CLI는 BashScript를 사용합니다. 바꿔야 돼요.wp_
합니다.FORM_D는 FORM_D를 사용합니다.DB를 사용합니다.
#!/bin/bash
normalizeWP_PHP_Script=$'
global $wpdb;
$rows = $wpdb->get_results( "SELECT * FROM wp_postmeta where meta_key='"'"'_wp_attached_file'"'"'");
foreach ( $rows as $row )
{
$postId = $row->{'"'"'post_id'"'"'};
$filePath = $row->{'"'"'meta_value'"'"'};
if( ! normalizer_is_normalized($filePath, Normalizer::FORM_D) ){
$filename_nfd = Normalizer::normalize($filePath, Normalizer::FORM_D);
echo $filename_nfd." | ";
$wpdb->query($wpdb->prepare("UPDATE wp_postmeta SET meta_value='"'"'$filename_nfd'"'"' WHERE post_id=$postId"));
}
}';
wp eval "$normalizeWP_PHP_Script"
echo " - Uploads-url nomalized --nfd"
이 상황에 대한 플러그인이 있습니다.미디어 파일 리네머에서 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/33325761/special-characters-encoding-in-image-filenames-after-server-migration
'programing' 카테고리의 다른 글
React Native에는 '가상 DOM'이 있습니까? (0) | 2023.02.26 |
---|---|
AngularJS에서 양방향 필터링을 수행하는 방법은 무엇입니까? (0) | 2023.02.26 |
해시 조인(Oracle RDBMS)과 머지 조인(Merge Join)의 차이점은 무엇입니까? (0) | 2023.02.26 |
스프링 부트 데이터 JPA - 업데이트 쿼리 수정 - 지속성 컨텍스트 새로 고침 (0) | 2023.02.26 |
브라우저 새로 고침 후 angularjs 코드 변경이 표시되지 않음 (0) | 2023.02.26 |