2016-10-17 5 views
4

이미 해당 엔티티 코드가있는 데이터를 반환하는 타사 API를 사용하고 있습니다. 예 : The Lion’s Pride.PHP 엔티티로 이미 이스케이프 처리되지 않은 문자열을 이스케이프 처리합니다.

API에서 문자열을 그대로 인쇄하면 위의 예에서 아포스트로피로 표시되는 브라우저에서 제대로 렌더링됩니다. 그러나 나는 API가 항상 엔티티를 나중에 사용할 것이라고 믿을 수 없으므로 인쇄하기 전에 htmlentities 또는 htmlspecialchars과 같은 것을 사용하고 싶습니다. 이 문제는 엔티티 코드의 앰퍼샌드를 다시 인코딩하고 최종 결과가 사용자 친화적 인 것으로 렌더링되지 않는 HTML 소스의 The Lion’s Pride이 될 것입니다.

htmlentities 또는 htmlspecialchars은 문자열에 아직 사용되지 않은 경우에만 어떻게 사용할 수 있습니까? 엔티티가 이미 문자열에 있는지 감지하는 기본 제공 방법이 있습니까?

답변

3

아무도 실제 질문에 대답하는 것 (html_entity_decode() 사용), 그래서 나는 것이다

나는 이미되지 않은 경우에만를 htmlentities 또는 반드시 htmlspecialchars를 사용할 수있는 방법

문자열에 사용됩니까? 엔티티가 이미 문자열에 있는지 감지하는 기본 제공 방법이 있습니까?

불가능합니다. 나는 HTML 개체에 대한 교육 게시물을 만들고있어 내가 실제로 화면에이를 인쇄하려면 무엇 :

The Lion’s Pride 

...는 ...로 인코딩 할 필요가

The Lion’s Pride 

그러나 그것이 문자열에 인쇄하기를 원하는 실제 문자열이라면 어떨까요? ... 등등. 여전히 해결되는 - 다른 답변에서 조언이 들어오는 곳이다 -


결론은 당신이 거기에서 주어진 작업 봤는데 어떤을 알고 해야합니다.

이중 인코딩 된 문자열을 제공한다면 어떻게 될까요? HTML로 인코딩 된 문자열을 XML로 래핑하기 시작하면 어떨까요? JSON으로 래핑하십시오. ... 그리고 JSON은 바이너리 문자열로 변환됩니까? 가능성은 무한합니다.

API가 갑자기 출력 유형을 전환하는 것은 불가능하지 않지만 사용자와의 원래 계약을 상당히 위반하는 것입니다. 어느 정도까지는 API가 할 일이 무엇인지에 대해 신뢰를해야합니다. 단원/통합 테스트가 나머지 신뢰를 구성합니다.

그리고 당신은 그들이 만들 수 어떤 가능한 변화를 위해 작동하는 프로그램을 작성하지 않을 수 있기 때문에, 전혀 어떤 변화를 예측하려고 무의미한입니다.

0

내가 가장 좋은 해결책은 원래 문자열에서 모든 HTML 엔티티/특수 문자를 먼저 디코딩 한 다음 다시 html로 인코딩하는 것이라고 생각합니다.

이렇게하면 원래 문자열이 인코딩되었는지 여부에 관계없이 올바르게 인코딩 된 문자열로 끝납니다.

0

문자열을 디코딩 한 다음 엔티티를 다시 인코딩하십시오.

$string = htmlspecialchars(html_entity_decode($string)); 

https://eval.in/662095

-1

또한 htmlspecialchars_decode()를 사용할 수 있습니다.

$string = htmlspecialchars_decode($string); 
-1

이를 htmlentities에서 이미 :

php > echo htmlentities('Hi&mom', ENT_HTML5, ini_get('default_charset'), false); 
Hi&mom 
php > echo htmlentities('Hi&mom', ENT_HTML5, ini_get('default_charset'), true); 
Hi&mom 

는 그냥 [선택 사항] 제 4 인수하지 이중 인코딩을 사용합니다.

0

당신이 원하는 것을 할 방법이 없습니다!

서비스가 어떤 종류의 서비스를 제공하는지 알아야합니다.

다른 점은 추측 할 수 있습니다.


예 : 서비스가 다시 &을주고 있지만

어떤 경우 이스케이프되지 않는 이유는 무엇입니까?

올바른 값이 &

동안 그렇게 당신이 잘못 &로 해석 할 탈출 IS 추측 것
관련 문제