2011-09-01 2 views
3

jQuery를 사용하여 a 요소의 href를 설정하려고합니다. Firefox 6에서 IDN을 설정하면 href가 인코딩됩니다. 하나의 예가 IDN http://räksmörgås.se이며 http://r%C3%A4ksm%C3%B6rg%C3%A5s.se으로 변경되었습니다. 다른 브라우저 (IE8, Chrome 13, Safari 5.1)에서 동일한 작업을 수행하면 IDN이 인코딩되지 않습니다.Firefox에서 국제 도메인 이름 + JQuery attr ('href') 문제가 발생했습니다.

내가 이것을하려고하는 이유는 사용자가 hrefs를 변경하고 웹 서버에 아약스에 의해 페이지 콘텐츠의 하위 집합을 업로드하도록 허용하고 있기 때문입니다. 링크가 HTML 문자열에 깊이 묻혀 있기 때문에 문제가 발생합니다. html 문자열의 모든 요소를 ​​파기하지 않는 것이 좋습니다.

Firefox에서 href를 설정할 때 인코딩을 비활성화하는 방법이 있습니까? 아니면 문제를 해결할 다른 방법이 있습니까?

(href가 유효한 punycode IDN, 즉 http://www.xn--rksmrgs-5wao1o.se 인 경우 브라우저가 멋지게 멋지다는 것을 알았지 만, js에서 punycode 인코딩을 수행해야합니다. 하나 또는 여러 개의 버그가있을 수 있으며 인코더/디코더의 공식 릴리스가없는 것 같습니다.)

다음 html 페이지에 내 문제가 표시됩니다. 국제 도메인 이름 (copy-paste "http : //www.räksmörgås.se"붙여 넣기)을 입력하면 #linkHtml은 Firefox를 사용하는 경우 href가 포함 된 전체 요소를 가져오고 다른 브라우저를 사용하는 경우 올바른 href를 가져옵니다 .

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script> 
<script> 
$(document).ready(function(){ 
$("#linkText").focus(); 
$("#linkText").keyup(function() { 
    var href = $(this).val(); 
    $("#link").attr('href', href); 
    $("#linkHtml").text($("#link").parent().html()); 
}); 
}); 
</script> 
</head> 
<body> 
<div><input id="linkText" type=text /></div> 
<div><a id="link" href="#">link</a></div> 
<span id="linkHtml"></span> 
</body> 
</html> 
+0

필자는 Mozilla에서 허용 목록에 포함되지 않은 TLD를 보았습니다 (.se는 괜찮습니다. http://www.mozilla.org/projects/security/tld-idn-policy-list.html). 거기에 버그와 비슷한 것이있다? 또한 참조 : http://idn.icann.org/Firefox_Information 및 http://www.slideshare.net/playingwithsid/universal-acceptability – m90

+0

흠, 괜찮아 보이는 (파이어 폭스 6 @ 우분투) - 업데이트 된 href isnt ' t endoded. – WTK

+0

@WTK, span 또는 Firebug에서 출력을 확인하고 있습니까? Firebug가 URL을 디코딩하는 것처럼 보이므로, 단지 방화범을 끄는 것이 불가능합니다. –

답변

0

사용 decodeURI (기본 기능)이 href가 값이 표시되는 방법에 관심이 있다면. 다음은 Firefox에서 확인을 표시합니다.

$("#linkHtml").text(decodeURI($("#link").parent().html())); 

Techincally, 내가 아는 한 Firefox가 인코딩 된 값을 표시하더라도 일부 서버에 제출 한 후에 해당 데이터를 확인해야합니다.

+0

예제에서 decodeURI가 올바르게 표시되는 것은 사실입니다. 그러나 DOM의 하위 집합을 서버에 제출합니다 (예 : $ ("# someDistantParentToTheLink"). html()).이 작업을 해독하면 안되는 내용이 디코딩 될 것 같습니다. –

+0

자, 이제 디코딩을해서는 안됩니다. 서버 측에서 알고있는 것만으로는 그런 종류의 디코딩을 처리 할 수 ​​있습니다. 당신은 "나는 html 문자열의 모든 요소를 ​​파헤 치지 않기를 바란다"고 언급했다. - 그게 무슨 뜻이야? html의 모든 요소를 ​​파헤 치라. 인코딩/디코딩이 그 문제의 어떤 것을 바꿀까요? – WTK

+0

글쎄, 서버에 html의 보트로드를 제출하고 사용자가 Firefox를 사용하면 모든 IDN 링크의 href는 인코딩되지만 다른 브라우저를 사용하면 인코딩되지 않습니다. 이것은 내가 서버 측에있는 모든 A 태그를 찾아서 html로 해킹해야한다는 것을 의미하며, 사용자가 Firefox를 사용한다면 html로 (yay, regex) 디코드합니다. –