file_get_contents ()가 UTF-8 문자를 분리합니다.
PHPfile_get_contents ()가 UTF-8 문자를 분리합니다.
외부 서버에서 HTML을로드하고 있습니다. HTML 마크 업에는 UTF-8 인코딩이 있고 ľ, š, č, ť, ¼ 등의 문자가 들어 있습니다. file_get_contents ()로 HTML을로드하면 다음과 같이됩니다.
$html = file_get_contents('http://example.com/foreign.html');
그것은 UTF-8 문자를 엉망으로 만들고 적절한 UTF-8 문자 대신에 Å, ¾, ¤ 및 유사한 말도 안되는 것을로드합니다.
이 문제를 어떻게 해결할 수 있습니까?
최신 정보:
HTML을 파일로 저장하고 UTF-8 인코딩으로 출력 해 보았습니다. 둘 다 작동하지 않으므로 file_get_contents ()가 이미 깨진 HTML을 반환하고 있음을 의미합니다.
업데이트 2 :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sk" lang="sk">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Language" content="sk" />
<title>Test</title>
</head>
<body>
<?php
$html = file_get_contents('http://example.com');
echo htmlentities($html);
?>
</body>
</html>
해결법
-
==============================
1.나는 폴란드어 언어와 비슷한 문제가 있었다.
나는 폴란드어 언어와 비슷한 문제가 있었다.
나는 시도했다 :
$fileEndEnd = mb_convert_encoding($fileEndEnd, 'UTF-8', mb_detect_encoding($fileEndEnd, 'UTF-8', true));
나는 시도했다 :
$fileEndEnd = utf8_encode ( $fileEndEnd );
나는 시도했다 :
$fileEndEnd = iconv( "UTF-8", "UTF-8", $fileEndEnd );
그리고 -
$fileEndEnd = mb_convert_encoding($fileEndEnd, 'HTML-ENTITIES', "UTF-8");
이 마지막은 완벽하게 작동했습니다 !!!!!!
-
==============================
2.file_get_contents에 대한 PHP 매뉴얼 항목의 주석에서 제안 된 해결책
file_get_contents에 대한 PHP 매뉴얼 항목의 주석에서 제안 된 해결책
function file_get_contents_utf8($fn) { $content = file_get_contents($fn); return mb_convert_encoding($content, 'UTF-8', mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); }
http://php.net/manual/en/function.mb-internal-encoding.php에서 행운을 시험해 볼 수도 있습니다.
-
==============================
3.좋구나. 나는이 문제를 일으키지 않는 file_get_contents ()를 발견했다. 제가 다른 질문에서 이야기하는 다른 이유가 있습니다. 바보 나.
좋구나. 나는이 문제를 일으키지 않는 file_get_contents ()를 발견했다. 제가 다른 질문에서 이야기하는 다른 이유가 있습니다. 바보 나.
이 질문을 참조하십시오 : DOM이 인코딩을 변경하는 이유는 무엇입니까?
-
==============================
4.난 당신이 단순히 거기에 문자 유형의 더블 전환 생각 : D 조
난 당신이 단순히 거기에 문자 유형의 더블 전환 생각 : D 조
html 문서 내에서 html 문서를 열었 기 때문일 수 있습니다. 그래서 결국 엔 이런 모습을 보입니다.
<!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> </head> <body> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Test</title>.......
따라서 mb_detect_encoding을 사용하면 다른 문제가 발생할 수 있습니다.
-
==============================
5.이것도 시도해보십시오.
이것도 시도해보십시오.
$url = 'http://www.domain.com/'; $html = file_get_contents($url); //Change encoding to UTF-8 from ISO-8859-1 $html = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $html);
-
==============================
6.터키 언어, mb_convert_encoding 또는 다른 문자 세트 변환이 작동하지 않았습니다.
터키 언어, mb_convert_encoding 또는 다른 문자 세트 변환이 작동하지 않았습니다.
또한 공간 char가 + char로 변환 되었기 때문에 urlencode가 작동하지 않았습니다. 퍼센트 인코딩의 경우 % 20이어야합니다.
이 하나의 일했습니다!
$url = rawurlencode($url); $url = str_replace("%3A", ":", $url); $url = str_replace("%2F", "/", $url); $data = file_get_contents($url);
-
==============================
7.35000 줄의 데이터로 작업하고 있습니다.
35000 줄의 데이터로 작업하고 있습니다.
$f=fopen("veri1.txt","r"); $i=0; while(!feof($f)){ $i++; $line=mb_convert_encoding(fgets($f), 'HTML-ENTITIES', "UTF-8"); echo $line; }
이 코드는 내 이상한 문자를 정상으로 변환합니다.
from https://stackoverflow.com/questions/2236668/file-get-contents-breaks-up-utf-8-characters by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
json_encode () 이스케이프 슬래시 (0) | 2018.09.21 |
---|---|
파일 다운로드를위한 HTTP 헤더 (0) | 2018.09.21 |
"SET NAMES"사용 여부 (0) | 2018.09.21 |
PDO :: fetchAll 대 PDO :: 루프에서 가져 오기 (0) | 2018.09.20 |
태그 / 성능 열기 / 닫기? (0) | 2018.09.20 |