문제

RSS 피드에 문제가 있습니다.

내가 할 때 <title>This is a title </title>

제목은 피드에 멋지게 나타납니다

그러나 내가 ddo $ 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);

문제는 제목에 유로 표시가있는 경우에 특히 문제가됩니다. 그런 다음 내 RSS 유효성 검사기에 다음과 같이 나타납니다.

Â\x80

보다 자세한 정보 :

좋아, 나는 지난 며칠 동안 이것으로 어려움을 겪고 있으며 해결책을 찾을 수 없습니다. 그래서 나는 현상금을 시작할 것입니다. 다음은 추가 정보입니다.

  • 피드에 들어가는 정보는 라틴 1 데이터베이스에 저장됩니다 (내가 관리하는)
  • 데이터베이스에 유로 표시가있을 때 문제가 나타납니다. € € 또는 &euro;
  • 유로 표지판은 때때로 이상한 숯불처럼 보이거나 x80처럼 보입니다.
  • 나는 독자 쪽이 아닌 피드 쪽의 문제를 해결하려고 노력한다.
  • 전체 코드는 여기에서 찾을 수 있습니다. 코드 덤프
  • 다음 : 때로는 유로 표시를 구문 분석 할 수없는 경우 항목 (제목 또는 설명)이 비어 있습니다. 따라서 브라우저에 피드를 표시 할 때 소스를 보면 찾을 수 있습니다. <title></title>

더 많은 정보가 필요한 경우 문의하십시오.

도움이 되었습니까?

해결책

문제는 출력 코드입니다. 변화

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을 사용하고 해당 인코딩에서 유로 사인을 표현할 방법이 없기 때문에 이것은 필요합니다. 자세한 내용은이를 참조하십시오 잘 작성된 소개.

나는 또한 당신을 제안합니다 XML에 대해 읽으십시오. 두 번째 장부터 시작하십시오.

다른 팁

사용 htmlspecialchars() 대신에 htmlentities().

RSS/원자 공급 그렇지 않습니다 HTML이므로 HTML 엔티티를 사용할 수 없습니다. XML에는 기본적으로 정의 된 5 개의 엔티티 만 있습니다, 당신은 사용할 수 없습니다 &euro;. UTF를 사용하기 때문에 - 전환없이 문자 그대로 유로 표시를 사용합니다 ( htmlentities), 그러나 다른 민감한 캐릭터를 피하고 있습니다 (htmlspecialchars).

그리고 이것은 완전히 유효한 RSS/XML 일 것입니다. 이것이 문제를 해결하지 못하면 다른 곳에 있다는 것을 의미합니다 (더 많은 도움을 위해 RSS의 생성 된 RSS를 제공하십시오).

어떤 프로그래밍 언어 또는 환경을 사용하십니까? 예를 들어, PHP에서 단일 따옴표는 내부 변수를 평가하는 것을 방지합니다.

그렇지 않으면,이 경우에는 실제로 그 인용문이 필요하지 않습니다. PHP의 배열 구문에 의해 혼란 스러웠을 수도 있습니다.

그래서 당신은 더 잘 쓰는 것이 좋습니다 :

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

인코딩 기능을 사용해야하는 이유를 이해하지 못합니다. 제 3자가 콘텐츠를 가져 오면 해당 문자열을 해독하는 방법을 모를 것입니다. 나는 당신은 de XML을 깨뜨릴 수있는 태그에 cdata를 사용해야한다고 생각합니다. 잘 정의 된 라이브러리를 사용하여 XML을 작성하십시오. php : domdocument 또는 xml writer (http://php.net/manual/en/book.xmlwriter.php)

RSS 프로파일이 허용되지 않는다고 생각합니다. 이것 문서는 다음을 명시합니다 title Holds, 추가로 정의되는 문자 데이터 다음과 같이.

이 기사 유로 표시에 대한 정보와 다양한 상황에서 지원에 도움이 될 수 있습니다. 해당 기사의 일부 제안에는 사용이 포함됩니다 &#8364; 또는 &euro; 또는 표지판을 "Euro"라는 단어로 바꾸는 것입니다. 행운을 빕니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top