2011-03-10 3 views
2

사람들이 데이터를 복사하여 붙여 넣는 PHP 웹 앱/도구가 있습니다. 데이터는 결국 XML로 바뀌며, 일단 저장되면 특정 문자가 실제로 이상한 문자를 생성합니다. 나는 복사 - 붙여 넣기 전에 "â € ™"보였다 확실하지 않습니다. 그렇게 해석되었을 수도 있습니다. 방금 긴 "-"이었을 수도 있습니다. 어쨌든,이 모든 문자는 정말 이상합니다. 그들을 쉽게 뺄 수있는 방법이 있습니까?다음과 같이 홀수로 붙여 넣은 문자를 제거하는 방법은 무엇입니까?

답변

1

. Joel's article on Encoding 매우 깨우침을 찾을 수 있습니다. 당신은 문자 쌍 악센트 "A"또는 "A"로 시작 볼 때

그리고 짧은 대답에 대한

그냥 UTF-8

<?php 

    $text = $entity['Entity']['title']; 
    echo 'Original : ', $text."<br />"; 

    $enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1"); 
    echo 'Detected Encoding '.$enc."<br />"; 

    echo 'Fixed Result: '.iconv($enc, "UTF-8", $text)."<br />"; 

?> 
+0

여러 답변을 받아 들일 수 있으면 좋겠어. 그냥 위의 대답을 사용하여 cakephp를 사용하므로 위생 라이브러리와 혼합되어 기본적으로 모든 데이터 beforeSave를 삭제 한 다음 unsanitize라는 함수를 만들었습니다. 사람들은 이상한 html 엔티티를 보지 못합니다. – Parris

1

블랙리스트보다는 허용 목록에 쉽게 표시 될 수 있습니다. 허용되는 문자의 목록을 만들고 나머지 문자를 제거합니다. 쉽게 preg_replace를 사용하여이 작업을 수행 할 수 있습니다 PHP는 8 비트 인코딩을 사용하지만 데이터가 대부분 가능성이 UTF-8로 작성되기 때문이다

$str = preg_replace($str, "/[A-Za-z0-9'-._\(\)/"); 
               | 
               V 
               add more chars here 
1

에서 그것을 인코딩 시도, 그것은 일반적으로 당신이를보고있는 의미 실제 인코딩이 iso-8859-1 인 캐릭터는 utf-8을 표시한다고 생각하는 소프트웨어에 의해 표시됩니다.

사람들이 XML을 인식 할 수없는 도구를 사용하여 XML 문서의 텍스트를 수정할 수있게하려는 경우 iso-8859-1로 인코딩 된 문자로 끝날 가능성이 있습니다. 파일의 시작 부분에있는 XML 선언이 존재하고 인코딩이 iso-8859-1이라고 말하면 아무런 문제가 없어야합니다. 그러나 XML 선언이 없거나 선언의 인코딩이 utf-8이면 손상된 데이터로 끝날 것입니다.

데이터를 복구하는 방법에 대해 질문했지만 데이터가 손상된 경우 복구보다는 항상 예방에 집중해야합니다.

+0

"데이터 손상이 발생했을 때는 항상 초점을 복구보다는 예방해야합니다"라고 동의합니다. 불행히도 저는 솔루션이 Word에서 다른 것으로 복사 및 붙여 넣기하는 것을 금지 할 것이라고 생각합니다. 그런 나쁜 생각은 아니지만, 나는 그것이 잘 될 것이라고 생각하지 않는다. – Charles

+0

그게 문제라고 생각합니다 ... 나는 iconv를 사용하려고 시도했지만, 사용자가 다양한 인코딩에서 붙여 넣기를 복사 할 수있는 곳에 있다면 utf-8로 데이터를 정규화하는 것은 어렵습니다. – Parris

관련 문제