문제
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 데이터베이스에 저장됩니다 (내가 관리하는)
- 데이터베이스에 유로 표시가있을 때 문제가 나타납니다. € € 또는
€
- 유로 표지판은 때때로 이상한 숯불처럼 보이거나 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 개의 엔티티 만 있습니다, 당신은 사용할 수 없습니다 €
. 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)
이 기사 유로 표시에 대한 정보와 다양한 상황에서 지원에 도움이 될 수 있습니다. 해당 기사의 일부 제안에는 사용이 포함됩니다 €
또는 €
또는 표지판을 "Euro"라는 단어로 바꾸는 것입니다. 행운을 빕니다!