2010-08-10 5 views
1

시작하려면 XML 파일 배열을 가지고 있습니다. 이러한 파일은 반복되고 16 진수 문자가 인식되지 않는지 확인해야하며 일반 UTF-8 텍스트 또는 일부 자리 표시 자로 바뀝니다.PHP로 xml 파일에서 16 진수 문자 제거하기

나는 파일을 반복하고 str_replace와 preg_replace를 모두 사용하여 16 진수 코드를 행운으로 대체하려고 시도했다. 나의 궁극적 인 문제는, 나는 simpleXML로이 파일들을 열려고 할 때 'non-utf characters'에 관한 에러를 받는다. 경고 : 여기

class HexadecimalConverter { 

    public $filenames = array(); 

    public function __construct($filenames) { 

     $this->filenames = $filenames; 
     $this->removeHex(); 

    } 

    public function removeHex() { 

     foreach ($this->filenames as $key => $value) { 

      $contents = file_get_contents($value); 

      $contents = preg_replace("/\x96/", '–', $contents); 
      $contents = preg_replace("/\x97/", '—', $contents); 
      $contents = preg_replace("/\x85/", "...", $contents); 
      $contents = preg_replace("/\xBA/", "", $contents); 

      file_put_contents($value, $contents); 

     } 

    } 

} 

는 내가 해결하기 위해 노력하고있어 오류입니다 : 여기

내가 지금까지 가지고 무엇 simplexml_load_file() [function.simplexml로드 파일] : ./04R_P455_S1157.xml : 5 : 파서 ​​오류 : 입력이 적절하지 않습니다. UTF-8, 인코딩을 나타냅니다! 바이트 : 0x97 0x0A 0x69 C : \ xampp \ htdocs \ hint_updater \ libraries \ hint_updater_classes.php on line 130

아직도이 행에서 제안 된 모든 것을 시도했지만 preg_replace가 나타나지 않습니다. 16 진수 코드의 모든 인스턴스를 교체해야합니다.

+1

나는 그것을 얻지 않는다. XML 파일의 현재 모습을 보여줄 수 있습니까? – Artefacto

+0

xml 파일은 구조가 잘 맞지 않습니다 ...하지만 사람들은 불법 문자를 복사하여 파일에 붙여 넣어 파일에서 원하지 않는 16 진수 코드를 생성하는 방법을 알고 있습니다. – ThinkingInBits

+0

XML 파일은 4000 줄 이상의 데이터가 될 수 있으므로 큰 파일입니다. – ThinkingInBits

답변

0

먼저 preg_replace 문서를 읽어야합니다. 그들은 함수가 수정 된 문자열을 반환한다는 것을 분명하게 명시합니다. 따라서 코드에서 모든 preg_replace 행을 대체 할 수 있도록 $contents = preg_replace(...);으로 변경해야합니다. 지금 당신은 바꾸기를하고 있지만 결과 문자열을 버리므로 결과적으로 원래의 문자열을 다시 파일에 씁니다.

0

preg_replace은 새 문자열을 반환합니다.

시도 $contents = preg_replace("/\x96/", '–', $contents); 등.

+0

죄송합니다. 오타였습니다 ... 나는 방금 preg_replace를 다시 삽입했습니다. 적절한 $ contents = 각 preg_replace 전에 여전히 16 진수 코드의 모든 인스턴스를 통과시키지 않는 것 같습니다. – ThinkingInBits

+0

'foreach ($ this-> fileenames $ value)'를 원하지 않습니까? ? 이것이 내가이 코드를 잘못 생각할 수있는 유일한 다른 것입니다. – Borealid

+0

중요하지 않아야한다 ... 이것은 그냥 내게 값이 – ThinkingInBits