2012-01-09 3 views
2

내 DB에는 word 문서에서 복사하여 붙여 넣을 수있는 텍스트가 있습니다. 여기에는 몇 개의 둥근 따옴표와 곱슬 아포스트로피가 포함되어 있습니다. PHP 코드는이 텍스트를 XML 요소 중 하나로 XML 데이터/문서를 생성합니다. 인코딩 오류XML을 생성 할 때 PHP에서 곱슬 아포스트롬과 곱슬 따옴표를 처리하는 방법은 무엇입니까?

: 1 열에서 라인 (40)에

오류 : 내가하는 XML 문서이 페이지는 다음과 같은 오류가 포함

을 표시 할 때

내가지고있어 오류입니다

다음은 첫 번째 오류까지 페이지를 렌더링 한 것입니다.

게시물 here에서 언급했듯이 시도했지만 제대로 작동하지 않습니다. 또한 시도했습니다

$ output = iconv ('UTF-8', 'ASCII // TRANSLIT', $ input);

상기 언급 된 바와 같이, here. 이것은 곱슬 따옴표 나 아포스트로피가 나타날 때까지 텍스트를 표시합니다. 여기서 다른 문자 출력 형식을 언급해야합니까?

XML 문서를 생성 할 때 PHP에서 이러한 특수 문자를 처리 할 수있는 함수가 있습니까? 내가 XML의 documnet 여기

에 대한 <?xml version="1.0" encoding="utf-8"?> 문자 인코딩을 사용하고 나의 코드

header('Content-type: text/xml'); 
echo '<?xml version="1.0" encoding="utf-8"?>'; 

$item = mysql_fetch_object($result); 
<listitems> 
    <item> 
     <name><?=htmlspecialchars(stripslashes($item->name))?></name> 
     <details><?=htmlspecialchars(stripslashes($item->details))?></details> 
     . 
     . 
     . 
     . 

    </item> 
</listitems> 
+0

자세한 정보가 필요합니다. 데이터를 가져올 때 데이터가 어떤 문자 집합입니까? 문서를 생성하는 데 사용하는 PHP 코드를 보여줄 수 있습니까? –

+0

일부 코드로 내 질문을 업데이트했습니다. –

+0

데이터베이스의 데이터는 어떤 문자 집합입니까? –

답변

3

그것은 DEFAULT CHARSET = 라틴

그것은 당신이 ISO-8859-1 데이터를 가져 오는 및 UTF-8로 출력됩니다 수 말한다. 그러면 128 개의 기본 ASCII 문자 이외의 문자가 유효하지 않게됩니다.

$ 출력의 iconv = ('ISO-8859-1', 'UTF-8 // 음역하여'$ 입력);

iconv() 사용해

+0

감사합니다 Pekka, 작동 :) 그냥 우리 가이 iconv ('latin1', 'UTF-8', $ appObj-> 설명)처럼 쓸 수있는 알고 싶다; 표 에서처럼 latin1로 언급됩니다. 그냥 그것에 대해 더 잘 알고 싶습니다 –

+1

"Latin1"은 Windows Latin 1, windows-1252를 참조 할 수도 있습니다.사실 ISO-8859-1은 곱슬 아포스트로피 나 둥근 따옴표를 포함하지 않지만 프로그램이 ISO-8859-1을 효과적으로 Windows-1252로 취급하는 것은 드문 일은 아닙니다. –

+0

@ Jukka 아, 세부 사항이 나를 도망 쳤다. [mySQL의 latin1은 ISO-8559-1이 아닌 Windows-1252와 동일하게 보입니다.] (http://dev.mysql.com/doc/refman/5.0/en/charset-we-sets.html). 그러나이 @S K는 중괄호 따옴표가 작동하지 않으면 iconv의 첫 번째 매개 변수로'windows-1252'를 사용해야 할 수도 있음을 의미합니다. –

0

시도의 일부는 다음과 같이 CDATA 블록에 곱슬 아포스트로피가 들어있는 텍스트 노드를 래핑하는 것입니다 :

<text><![CDATA[This is my test´s text]]></text> 

그런 식으로 XML 뷰어가 해당 텍스트를 구문 분석하지 못하게하고 올바르게 렌더링됩니다. 테이블에

+0

테이블에 데이터가 표시되었지만 일부 데이터 만 표시되었습니다. 그냥 중간에 들렀다. –

관련 문제