2013-11-25 1 views
2

iframe에서 실행되는 작은 WYSIWYG 편집기를 만들었습니다.
나는 jQuery로 링크를 삽입하고이 같은 그 HREF을 설정 href의 contenteditable/jQuery 앰퍼샌드

$link.attr("href", url); 

나중에 내가 iframe이의 소스를 얻을 MySQL 데이터베이스에 저장합니다.

내 문제 :
예를 들어 앰퍼샌드가 포함 된 링크를 삽입 할 때. http://www.example.org?foo=bar&bar=foo 브라우저는이를 http://www.example.org?foo=bar&bar=foo으로 변환합니다.
그런 다음 소스가 나타나면 간단한 앰퍼샌드 대신에 HTML 엔터티 &이 들어 있습니다.

사이드 노트 : 실제로 링크가 필요하므로 html로 인코딩 된 앰퍼샌드를 사용할 수 없습니다.

두 질문 :

  1. 는 브라우저가 HTML 엔티티로 변환하지 않고 링크를 삽입 할 수있는 방법이 있습니까?
  2. 그럴 수 없다면 나중에 다른 문자를 html_decode해야하는 그 발생을 대체해야합니까?

답변

2

이것은 HTML 클라이언트 내에서 유효한 동작입니다. HTML 인코딩없이 모든 링크를 다시 받아야하는 경우 사후 처리를 권장합니다. 이렇게하는 가장 좋은 방법은 각 링크의 href를 가져 와서 DOM 노드에 HTML로 붙여 넣고 텍스트로 다시 읽어 와서 동일한 네이티브 DOM 인코딩을 사용하는 것입니다.

다시 서버로 보내기 전에

:이 설계를 통해-조금 보인다

// The string you'll send back to the server 
var iframeContentString; 
// The contents of the iframe as HTML 
var $iframeContents = $iframe.find('body').clone(); 
// A list of all hrefs 
var anchorHrefs  = []; 
// An empty node to use for HTML decoding using native methods 
var $emptyNode  = $('x'); 

// For each link, decode the href and store 
$iframeContents.find('a').each(function storeDecodedHref(element){ 
    // Assign the anchor's href to the empty node as HTML 
    $emptyNode.html(element.href); 

    // Store it as text 
    anchorHrefs.push($emptyNode.text()); 

    // Replace the href with a string we can find with Regexp 
    element.href = '@[email protected]'; 
}); 

// Store the href-free content as a string 
iframeContentString = $iframeContents.html(); 

// Replace our Regexp flag with the saved link 
iframeContentString.replace(/href="@[email protected]"/g, function injectDecodedHref(){ 
    return anchorHrefs.unshift(); 
}); 

,하지만 브라우저 자체의 신뢰성 DOM 읽기/인코딩/디코딩 API합니다 (대한 jQuery를 래퍼)를 사용하고 있기 때문이다 Regexp (never attempt to parse HTML with Regexp!)에있는 href 속성을 구문 분석하려고 시도하는 위험한 경로를 따라가는 것보다 먼저 Rerexp를 쉽게 이해할 수 있도록 DOM 내용을 수정해야합니다.

나는 그것을 테스트하지 않고 즉석에서 썼지 만, 의견은 당신이 그것을 가이드로 읽고 당신의 특정 상황에 적용하는 데 도움이되기를 바랍니다.

희망 작품입니다.

+0

안녕하세요 @ 바니 잘 대답 해 주셔서 감사합니다. 나는 내일 그것을 시험해 볼 것이다. 부가 메모 : 어떤 문자가 변경 될지 알 수있는 방법이 있습니까? – Horen

+0

다른 캐릭터에 대해 걱정할 필요가 없다고 생각합니다. ([여기에 몇 가지 이야기가 있습니다] (http://stackoverflow.com/questions/7456326/what-other-characters-beside-ampersand-should-be) -encoded-in-html-href-src-at)) - 다른 문자는 문맥에서 명확하지 않은 경향이 있습니다. 그러나 하루가 끝날 때 브라우저에 따라 다르므로 시도하는 것보다는 브라우저 자체의 내부를 사용하는 것이 좋습니다 내부 작업이라고 추측합니다. – Barney