:.
은 "... 나는 '' '와 같은 문자를 눈치가 â의 €의 ™로 대체 ... 내가 데이터를 다운로드 한 후 실제 값으로 같은 쓰레기 characeters 교체 하기로 결정 무엇 그런 가비지 문자열 목록과 해당 문자가 필요합니다. "
은 엄격하게이 부분을 다루는 : ". 내가 필요로하는 등 쓰레기 문자열과 동등한 문자 목록은"
PHP를 사용하면 이러한 문자 및 이와 동등한 문자를 생성 할 수 있습니다. 1,111,998 개의 모든 유니 코드 포인트 또는 109,449 개의 Utf8 기호로 작업하는 것은 비실용적입니다. 다음 루프에서 ASCII 범위를 & # 128 및 & # 258 사이 또는 컨텍스트와 관련성이있는 다른 범위로 사용할 수 있습니다.
<?php
for ($i=128; $i<258; $i++)
$tmp1 .= "<tr><td>".htmlentities("&#$i;")."</td><td>".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."</td><td>&#".$i.";</td></tr>";
echo "<table border=1>
<tr><td>&#</td><td>"Garbage"</td><td>symbol</td></tr>";
echo $tmp1;
echo "</table>";
?>
경험에서, 아스키 맥락에서, 대부분의 "쓰레기"기호는 범위 & # 128 # 8246 & 8129에 # (드물게) & + 257 # &에를 기원.
"가비지"기호를 표시하려면 html 페이지 문자 세트를 iso-1 또는 처음부터 문제를 일으킨 다른 문자 세트로 설정해야합니다. charset이 utf-8로 설정된 경우에는 표시되지 않습니다.
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
.
는에 당신은 실제로 더 "쓰레기"를 만들 것입니다 PHP는 utf8_decode()와 "쓰레기"를 실행 취소 할 수 없습니다
"나는 데이터를 다운로드 한 후 실제 값 와 같은 쓰레기 characeters을 교체하기로 결정" 이미 "쓰레기". 그러나 간단하고 빠른 검색을 사용하고 php str_replace() 함수를 대체 할 수 있습니다.
먼저 교체하려는 "가비지"기호의 각 세트에 대해 2 개의 배열을 생성하십시오. 지금, 당신은 당신이 복사 사용 붙여 청소 재사용 할 수 2 개 배열을 가지고
<?php
//Adapt for your relevant range.
$tmp2 = "\$ReplaceArr = array(\n";
for ($i=128; $i<258; $i++)
$tmp2 .= "\"&#".$i.";\", ";
$tmp2 = substr($tmp2,0,strlen($tmp2)-2);//erases last comma
$tmp2 .= ");";
echo $tmp1."\n<br><br>\n";
echo $tmp2."\n";
?>
:
<?php
//ISO 8859-1 (Latin-1) special chars are found in the range 128 to 257
$tmp1 = "\$SearchArr = array(";
for ($i=128; $i<258; $i++)
$tmp1 .= "\"".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."\", ";
$tmp1 = substr($tmp1,0,strlen($tmp1)-2);//erases last comma
$tmp1 .= ");";
$tmp1 = htmlentities($tmp1,ENT_NOQUOTES,"utf-8");
?>
두 번째 배열이 대체 용어입니다 : 첫 번째 배열은 검색 용어입니다 이처럼 감염 문자열 중 하나를
$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString);
참고 : utf8_decode()는 "쓰레기"문자 정화 전혀 도움이됩니다. 그러나 더 이상의 오염을 방지하기 위해 사용될 수 있습니다. mb_ 함수가 유용 할 수도 있습니다.
+1 Concur and emphasize : 대부분 서버가 올바른 일을하고 있으며 코드 또는 도구를 수정해야합니다. 가장 간단한 경우에는 CP-1252 또는 ISO-8859-1 대신 UTF-8을 표시하도록 결과를 검사하는 데 사용하는보기 도구를 구성하는 것만으로도 충분합니다. – tripleee
동의 함. Internet Explorer와 같은 웹 브라우저를 사용하여 출력을 보는 경우 간단한 메뉴 옵션을 사용하여 문자 세트를 변경할 수 있습니다. ("보기"로 이동하여 "인코딩"을 선택한 다음 "서유럽 어 (Windows)"에서 "UTF-8"로 변경하십시오. "자동 선택"옵션을 해제 할 수도 있습니다.) 인코딩이 설정된 경우 UTF-8로 변환하면 Internet Explorer는 3 개의 "가비지 문자"를 가져와 UTF-8 바이트로 해석하고 다시 유니 코드 문자로 변환하고 유니 코드 문자를 표시합니다. 이 경우, librets는 변경할 필요가 없습니다. 출력을 보는 방식을 바꿀뿐입니다. 설명을 위해 – librik
고맙습니다. LIBRETS는 인코딩을 재정의하는 방법을 제공하지만 작동하지 않는 것처럼 보입니다. Librets 포럼은 애처롭지 만 등록 된 사용자를 승인하지 않고 한 달 후에도 승인하지 않으면 누구나 질문을 게시 할 수 없습니다. – ZafarYousafi