2013-11-20 3 views
7

이 문제에 대한 최선의 해결책은 XSLT를 사용하는 것이지만,이 문제를 내 문제에 적용하는 방법을 모르겠습니다.PHP의 DOMDocument를 사용할 때 퍼센트 인코딩 href 속성 사용하지 말것

기본적으로 DOMDocument는 전달 된 URL (href 속성)의 이스케이프 작업을 훌륭하게 수행하고 있지만 사실은 Twig/Django 스타일 템플릿을 작성하는 데 사용하고 있습니다. 차라리 혼자 남겨두고 싶습니다. . 여기에 구체적인 예는 "문제"를 보여주는입니다 :

<?php 
$doc = new DOMDocument(); 
$doc->loadHTML('<html><body>Test<br><a href="{{variable}}"></a></body></html>'); 
echo $doc->saveHTML(); 

다음과 같은 출력한다 :

<html><body>Test<br><a href="%7B%7Bvariable%7D%7D"></a></body></html> 

은하지 퍼센트 인코딩, href 속성 수 있습니까?

이 아닌 경우 간결하고 안정적인 해결 방법을 제안 할 수 있습니까? 나는 다른 처리를하고 있으며, DOMDocument 사용은 유지되어야 할 것이다. 아마도 사전/사후 처리 트릭일까요?

+0

DOM은 기존 문서를 조작하기에 좋은 곳입니다, 그러나 건물 새로운 문서를 처음부터, 그것은 문자열 작업을 사용하는 것이 낫습니다. 특히 "html과 비슷한 모양의"템플릿을 만들 때 더욱 그렇습니다. –

+0

저는 실제로 기존 문서를 조작하고 있습니다. 이 문제를 명확하게 설명하는 가능한 가장 짧은 샘플 코드입니다. –

+0

기본적으로이 예제에서 사용 된 문자열은'file_get_contents()', * 등을 통해로드되었을 것입니다. –

답변

2

은 내가 '해킹'/ 덕트 테이프 솔루션에 만족하지 않다, 그러나 이것은 내가 현재 문제 해결에있어 방법은 다음과 같습니다

function fix_template_variable_tokens($template_string) 
{ 
    $pattern = "/%7B%7B(\w+)%7D%7D/"; 
    $replacement = '{{$1}}'; 
    return preg_replace($pattern, $replacement, $template_string); 
} 

$html = $doc->saveHTML(); 
$html = fix_template_variable_tokens($html); 
+0

네,하지만 이것은'urldecode' 해결책보다 낫습니다 : D – Epoc

관련 문제