2009-11-06 8 views
0

내가 아포스트로피의 자동화 된 RSS의 ASP.NET의 공급 및 발생을 짓고 있어요 하이픈은 매우 이상하게 렌더링됩니다ASP.NET 특수 문자 문제

"다음 테스트는 것"간단히 정리 € ™ "로 렌더링됩니다

sArticleSummary = sArticleSummary.Replace("£", "£") 
: 아래의 추출물에서와 같이 SA 테스트는 "

나는 앰퍼샌드 탈출 수동으로 £의 HTML 탈출을 구축하여 파운드 기호 (£)와 비슷한 문제를 회피 관리해야

그러나 다음 시도는 아포스트로피 문제를 해결하지 못하는 경우 화면에 ’이 표시됩니다.

sArticleSummary = sArticleSummary.Replace("’", "’"") 

모든 의도와 목적에 대한 데이터베이스 (SQL2005)의 문자열은 일반 텍스트로 나타납니다 - 사람이 일반 텍스트 문자열이 방식으로 나오는 계속 될 것 같다 왜 조언을 할 수 있으며, 사람이 어떤 아이디어가있는 경우 감사합니다 아포스트로피 문제를 해결하는 방법에 관해서.

도움 주셔서 감사합니다.

문제가 데이터베이스 사이 어딘가에이며,이 데이터가 ’에 아포스트로피에서 변환 된 문자열 VAR에로드되는 것처럼 블라디미르의 도움에

또한 [편집], 지금 보이는 - 사람이 보았다 이 전에 또는 포인터가 발생합니까? 난 그냥 둘 것

감사

답변

1

SQL 2005 데이터베이스의 열은 varchar(N), char(N) 또는 text으로 정의됩니다. 그렇다면 데이터베이스에서 설정 한 것과 다른 코드 페이지 설정을 사용하는 데이터베이스 드라이버 때문입니다.

나는 다음 유니 코드 코드 포인트, 코드 페이지에 의해 정의뿐만 아니라 사람들을 포함 할 수있는 각각 nvarchar(N), nchar(N) 또는 nvarchar(max)에 (비 ASCII 데이터를 포함 할 수있는 어떤 다른 사람)이 열을 변경하는 것이 좋습니다.

내 데이터베이스는 모두 이러한 유형의 인코딩 문제를 방지하기 위해 nvarchar/nchar만을 사용합니다. 유니 코드 필드는 두 배의 저장 공간을 사용하지만이 기술을 사용하면 성능 차이가 거의 없습니다 (SQL 엔진은 내부적으로 유니 코드를 사용합니다).

+0

우리는 이걸 가겠다. 칼럼은 실제로 varchar 다. – Chris

-1

은 CDATA 태그에 "여기 테스트입니다." 쉽고 작동합니다.

<![CDATA[Here's a test]]> 
+0

감사 - 단지 테스트는 입력 문자열이 당신의 예는 하드 코드로 잘 작동하기 때문에 â € ™보다는 아포스트로피로 채워하지만되어 있어야합니다 즉시 VAR 여전히 그것을 사용되는 렌더링합니다. – Chris

0

는 (SQLServer에 평야에 표시하는 동안) 데이터가 실제로 일부 MS 워드 특수 문자를 운반하는 것을되거나.

+0

데이터를 올바르게 패치하는 대신 올바르게 처리하는 것이 좋습니다. Word 문서에서 가져온 경우 문제가 발생할 수있는 문자가 많으며 모든 문자를 처리해야합니다. – devstuff

+0

감사합니다 - 우리는 입력 양식에 sanitiser를 확실히 추가 할 것입니다 - Word C & P는 언제나 두통 거리였습니다. – Chris

+0

FYI : 적절한 자바 스크립트 기반 WYSIWYG 편집기의 대부분은 "Word에서 붙여 넣기"기능을 사용하여 콘텐츠를 de-Word 형식으로 작성하므로 입력 시나리오에 적합하거나 서버 측에서 알고리즘을 수행 할 수 있습니다. – devstuff

0

데이터베이스에서 유니 코드 문자가 있다고 가정하면 가장 쉬운 방법은 System.Xml.dll에서 XmlDocument 개체와 함께 RSS 피드를 추가하여 변환을 처리하도록하는 것입니다. (RSS 피드에서 발견 된 요소에 대해 잘 모르겠습니다.)

 XmlDocument rss = new XmlDocument(); 
     rss.LoadXml("<?xml version='1.0'?><rss />"); 
     XmlElement element = rss.DocumentElement.AppendChild(rss.CreateElement("item")) as XmlElement; 
     element.InnerText = sArticleSummary; 

또는 Linq.XML :

 XDocument rss = new XDocument(
      new XElement("rss", 
       new XElement("item", sArticleSummary) 
      ) 
     );