0

우리 PHP 웹 응용 프로그램 (PHP 5.6.30Windows Server 2008 R2에서 실행)와 유효하지 않은 문자가 발생 UTF-8 인코딩을 사용하지만 Windows-1252을 사용하여 인코딩 된 파일에서 데이터를 가져올 필요가있다. 데이터를 가져 오면 다음과 같이 UTF-8으로 변환됩니다. 우리는 다음과 같은 샘플 데이터를 가져올 때교체 빈 공간은 UTF-8

iconv('Windows-1252', 'UTF-8', $value); 

는 변환은 Windows-1252 문자의 대부분 제대로 작동하지만 아래 라인 8에서 à 문자는 문제를 제공하고 올바르게 변환되지 않습니다.

1;€ 
2;é 
3;è 
4;ë 
5;ï 
6;ä 
7;á 
8;à 
9;ç 
10;ß 
11;ø 
12;í 
13;ì 
14;ñ 
15;@ 
16;û 

다음은이 데이터를 웹 사이트에 표시 한 결과를 보여주는 스크린 샷입니다. PHPiconv 올바르게 à 문자 변환되지 않는 이유

enter image description here

는 아는 사람 있나요?

+0

그리고 '$ this-> encoding'의 임계 값은 무엇입니까? –

+0

@MarkBaker 죄송합니다, 그 값은'Windows-1252'입니다. 그것을 반영하기 위해 질문을 업데이트 할 것입니다. – BruceHill

+0

헤더 인코딩을 사용해 보셨습니까? 또는'iconv_set_encoding'? –

답변

1

나는이 문제를 해결했으며 처음에는 생각했던 것처럼 iconv과 아무 관련이 없습니다. 요구 된 변화는 아주 작은 것이 었습니다. 단 한 명의 캐릭터 였지만, 사냥을하기까지 나이가 들었습니다. 그것은 잘못된 문이 실제로 다음과 같은 것을 밝혀 :

preg_replace('/\s+/', ' ',$columnvalue)) 

이 정규 표현식의 목적은 값에서 공백을 제거하는 것입니다,하지만 인코딩이 때문에 UTF-8regular expressionà를 손상의 잔류 효과가 있었다 캐릭터. 이 문제를 해결했지만 정규식 정의 끝에 u (unicode modifier)을 추가했습니다. 따라서 표현식은 다음과 같습니다.

preg_replace('/\s+/u', ' ',$columnvalue)) 

페이지의 인코딩이 정확합니다.