2009-05-04 4 views
3

RSS 피드에 문제가 있습니다.rss feed와 cdata의 문제

내가 제목은 공급

에 잘 나타납니다하지만 $ 제목을 DDO 때 = "이것은 tilte이다"<title>This is a title </title>

작업을 수행 할 때;

<title><![CDATA['$title']]></title> 

제목이 전혀 표시되지 않습니다.


여전히 작동하지 않습니다. 내 RSS 피드이 동적으로 발생하며 다음과 같습니다

$item_template=" 
     <item> 
     <title>[[title]]</title> 
     <link>[[link]]</link> 
     <description><![CDATA[[[description]]]]></description> 
     <pubDate>[[date]]</pubDate> 
     </item> 
     "; 

및 루프에서

: 제목 유로 기호가 특별히 때

$s.=str_replace(
array("[[title]]","[[link]]","[[description]]","[[date]]"), 
array(htmlentities($row["title"]),$url,$description,$date), 
$item_template); 

문제입니다.

Â\x80 

더 자세한 정보 : 그럼처럼 내 RSS 유효성 검사기에 표시

나는 지난 몇 일 동안 함께 struggeling 된 나는 해결책을 찾을 수 없습니다 확인 . 그래서 나는 현상금을 시작할 것이다. 여기에 대한 자세한 내용은 다음과 같습니다

  • 피드에 간다 정보는 (내가 관리하는) 라틴 (1) 데이터베이스에 저장됩니다
  • 데이터베이스에서 유로 기호가있을 때 문제가 나타납니다. 그와 같은 € 또는 &euro;
  • 유로 기호 거세한 숫양 상관없이 가끔 이상한 charachters처럼 아니면 내가하지 독자 측의 공급 측면에서 문제를 해결하려고
  • Â \의 X80처럼 나타납니다.
  • 전체 코드는 다음에서 찾을 수 있습니다. codedump
  • 다음 : 유로 기호를 구문 분석 할 수없는 경우 항목 (제목 또는 설명)이 비어있는 경우도 있습니다. 브라우저에서 피드를 볼 때 소스를 보면 찾을 수 있습니다. <title></title>

자세한 정보가 필요하면 질문하십시오.

+0

그런데 영어와 독일어를 함께 사용하지 마십시오. "데이텀"은 시원하게 들리지만 데이터의 유일한 요소입니다. 당신은 "데이트"를 찾고 있습니다. Günling from Münster (Westf.) – phihag

+0

base64_encode ($ row [ "title"])와 같은 정확한 데이터베이스 값을 알려주시겠습니까?)이 값에 유로 기호가 포함 된 이유는 무엇이라고 생각하십니까? (예 : 어떻게 입력 했습니까? 다른 곳에서는 "€"로 표시됩니까?) – phihag

답변

15

문제는 출력 코드입니다.

echo '<title><![CDATA[$title]]></title>'; 

보조 노트로

echo '<title><![CDATA[' . $title . ']]></title>'; 

로 변경 한 다음 마음하십시오 후속와 자신의 질문에 대답하지만, 원래 하나를 편집하지 마십시오. 정당한 이유없이 regexps를 사용하지 마십시오. 짐작하지 마라. 대신

, 당신이 모두 함께 했어야 무엇 : htmlentitites에 제목을 싸서 같이 할 수 :

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>'; 

사용하는 문자 인코딩과 [encoding]를 교체합니다. 대부분 'UTF-8'입니다. php (< 6)는 기본적으로 ISO-8859-1을 사용하고 있기 때문에 필요합니다. 해당 인코딩의 유로 기호. 자세한 내용은 well-written introduction을 참조하십시오.

나는 또한 read about XML를 제안합니다. 두 번째 장부터 시작하십시오.

+1

내 시작 게시물을 편집하고 내 followups를 제거했습니다. – sanders

+0

나는 아직도 당신의 대답을 볼 수 있지만, 노력에 감사드립니다. 미안하지만, 내 대답이 불완전해서 당장 그걸 보았어 야 했어. 또한 문자 인코딩을 지정해야합니다. 답변을 수정했습니다. – phihag

+0

글쎄, 아직 유로화에 문제가있어. $ s.= 않는 str_replace ( \t \t \t \t \t \t \t \t \t 배열 ("[이름]", "[링크]", "[설명]", "[데이텀]") \t \t \t \t \t \t \t \t \t 어레이 (를 htmlentities ($ 행 [ "제목", ENT_NOQUOTES "UTF-8", 거짓), $의 URL, $ 설명, $ 데이텀) \t \t \t \t \t \t \t \t \t $ item_template); \t \t \t \t \t 이렇게하면 빈 제목이 반환됩니다. – sanders

1

어떤 프로그래밍 언어 또는 환경을 사용하십니까? 예를 들어, PHP에서는 작은 따옴표로 변수 내부의 평가를 막을 수 있습니다.

그렇지 않으면이 경우 따옴표가 필요하지 않습니다. PHP의 배열 구문에 혼란 스러울 수도 있습니다. 나는 RSS 프로필이 그것을 허용하지 않습니다 생각

<title><![CDATA[$title]]></title> 
-1

: this 문서는 title가 더 as follows을 정의 문자 데이터를 보유한다고

그래서 당신은 더 나은 쓰기를 것입니다.

-1

This article은 다양한 상황에서 유로화 및 지원에 대한 정보로 도움이 될 수 있습니다. 이 기사의 제안 중 일부는 &#8364; 또는 &euro;을 사용하거나 기호를 "euro"로 바꾸는 것을 포함합니다. 행운을 빕니다!

3

htmlentities() 대신 htmlspecialchars()을 사용하십시오.

RSS/ATOM 피드 HTML이 아니므로 HTML 엔터티를 사용할 수 없습니다. XML has only five entities defined by default이므로 &euro;을 사용할 수 없습니다. UTF를 사용하고 있기 때문에 변환하지 않고 (htmlentities) 변환하지 않고 다른 민감한 문자 (htmlspecialchars)를 이스케이프 처리하여 문자 그대로의 유로화 기호를 사용합니다.

그리고 이것은 완전히 유효한 RSS/XML이 될 것입니다. 이 방법으로 문제가 해결되지 않으면 다른 곳에서 거짓말을합니다 (더 많은 도움을 얻기 위해 RSS의 원시 소스를 생성하십시오).

0

왜 인코딩 기능을 사용해야하는지 잘 모르겠습니다. 제 3자가 콘텐츠를 가져 가면 해당 문자열을 해독하는 방법을 알 수 없습니다. 제 생각에는 - XML을 깨뜨릴 수있는 태그에 CDATA를 사용해야합니다. - 잘 정의 된 라이브러리를 사용하여 XML을 작성하십시오. PHP의 경우 : DomDocument 또는 XML Writer (http://php.net/manual/en/book.xmlwriter.php)