부러진 한국어 문자열이 있습니다. 이것을 utf-8 문자열로 복구하려고합니다.PHP 복구가 깨졌습니다. 영어 이외의 문자열 (iso 8859-1)을 utf-8로 사용합니다.
$str = '"3234", "ºÎ»êÀü´ÜÁö ¹èÆ÷»ç¿ø ¸ðÁý. 2¿ù6ÀϺÎÅÍ ¤ý»ó¼¼³»¿ëÈ®ÀÎ", "2017-03-02 11:12:34';
위의 문자열은 전체 문자열의 일부이며 파일에 있습니다. 파일은 utf-8에 저장되며 깨지지 않은 (한국어) 문자도 포함합니다. 일부 문자열 만 깨진 문자가 있습니다.
시도해보십시오. mb_convert_encoding, iconv가 작동하지 않습니다.
print_r(mb_detect_encoding($str));
result : UTF-8
때문에 2 문자열을 분할 한하여 하나를 변환하려고 시도합니다.
$result = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($result);
result :
array(52) {
[0]=>
string(2) "º"
[1]=>
string(2) "Î"
[2]=>
string(2) "»"
[3]=>
string(2) "ê"
[4]=>
string(2) "À"
[5]=>
......
3. 내가 무슨 일이 일어나고 있는지 아무 생각하십시오. 그래서 나는 그것을 반대로 다시 시도했다. 문자열 위
실제로 "부산 전단지 배포 사원 모집. 2 월 6 일부터 ㆍ 상세 내용 확인" (I 온라인 변환 사이트에 복구. 사이트 주소 및 기타 정보는이 게시물의 하단에)
입니다다음 두 깨진 각 문자 하나 올바른 문자를 알아 냈다. 그래서 각 깨진 문자와 대상 (올바른) 문자에 대한 16 진수 코드를 확인했습니다. 몇 가지 계산을 수행했습니다.
$str = 'ºÎ'; //부
$var = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
var_dump($var);
$tmp_str = ''; $result = '';
for($i = 0; $i < count($var); $i++)
{
if(($i+1)%2 == 1) {
$tmp_str .= dechex(_uniord($var[$i]));
} else {
$tmp_str .= dechex(_uniord($var[$i]));
$uni2 = dechex(hexdec($tmp_str) + hexdec('EAFBB2'));
$result .= hexToStr($uni2);
$tmp_str = '';
}
}
echo $result;
result : 부
! 그러나 그것은 "부"만을 위해 일했습니다. EAFBB2 대신 각 한국어 문자에 다른 16 진수를 추가해야합니다.
시도 JAVA 4
,
new String(XXX.getBytes(8859_1), "euc-kr")
내 목적을 위해 잘 작동하는 것 같다. 하지만 나는 자바를 모른다. http://egloos.zum.com/ndba/v/2831611
5. 자바의 getBytes의 동등한로 시도하십시오. 그러나 그것은 매우 어려웠습니다. 깨진 문자는 각각 2 바이트를가집니다. 깨진 두 개의 문자가 올바른 문자입니다. 그러나 올바른 문자는 3 바이트입니다 (아마 utf-8이기 때문에)
즉 2 + 2 => 3이되어야합니다.
$str = 'ºÎ'; //부
for($i = 0; $i < strlen($str); $i++){
$bytes[] = ord($str[$i]);
}
print_r($bytes);
Array
(
[0] => 194
[1] => 186
[2] => 195
[3] => 142
)
$str = '부'; //부
for($i = 0; $i < strlen($str); $i++){
$bytes[] = ord($str[$i]);
}
print_r($bytes);
Array
(
[0] => 235
[1] => 182
[2] => 128
)
도와주세요. 나는 많은 부서진 끈이 있고 나는 그들을 회복 할 필요가있다.
온라인 변환 사이트 (http://string-functions.com/encodedecode.aspx)가 말했다, 여기
, 당신은 당신이 하나의 인코딩으로 텍스트 파일을 인코딩 한 후 다른 인코딩으로 텍스트를 디코딩 할 경우 발생하는 시뮬레이션 할 수 있습니다. 예를 들어보십시오. utf-8로 스웨덴 문자 åäö를 인코딩 한 다음 iso-8859-1로 디코드하거나 utf-8로 明伯 (단순한 중국어 의미 '이해')를 인코딩하고 GB 18030으로 디코딩하십시오. 캐릭터 : 鏄 庝 集, 나는 정말로 이해할 수 없다.
내가 원했던 것이고이 사이트 복구는 깨진 문자열을 아주 잘 복구합니다. (iso-8859-1에서 euc-kr까지) 그러나 나는 php에서 같은 과정을 원한다.
나는 몇 가지 정보를 놓쳤다. 실제로 문자열은 문자열의 일부입니다. 전체 문자열은 다음과 같습니다. 파일은 utf-8로 저장되며 깨지지 않고 깨진 문자는 일반 utf-8 한국어 문자를 포함합니다. "13440", "0c9e940c3bb84", "58ad32cd5bedf3d1c5", "", "{"p ":"761596 ","name ":"Ã'μμÇÇ»í ° øºÎºÁ½½ÇºÐ ","type ":" ","referrer ":"https://search.naver.com/search.naver?where=webkr&sm=tab_jum&ie=utf8&query=%EC%B4%88%EB%93%B1%ED%95%99%EC% " 83 % 9D % EA % B3 % B5 % EB % B6 % 80 ","site_id ":" "}", "2017-03-10 08:06:39" –
많은 일처럼 들립니다. 질문에 샘플 파일에 대한 링크를 추가하여 문자 집합 문제를 피할 수 있습니다. 누구도 도움을 줄 수는 없을 것입니다. – miken32
http://pastebin.com/fkeBs1xL 이것은 내 파일의 샘플입니다. 원본 파일을 공개적으로 공유 할 수 없습니다. 죄송합니다. –