2011-09-20 7 views
3

문자열에 "€"이 있습니다.HTML 엔티티의 16 진 코드 얻기

나는 플래시로 보낼 수 있도록 "\u20AC" 값을 얻기 위해 16 진수로 변환하고 싶습니다. 모든 통화 기호에 대한 동일

..

£ -> \u00A3 
$ -> \u0024 
etc 

답변

3

먼저 필요로하는 정확한 결과를 반환하기 위해 추가 수정이 필요할 수는 $known entity in HTML 4.01되지 않습니다. 그러나 HTML 5와 PHP 5.4에서는 html_entity_decodeENT_QUOTES | ENT_HTML5으로 호출하여 디코딩 할 수 있습니다.

당신은 엔티티를 디코딩 할 만 한 후 변환 :

//assumes $str is in UTF-8 (or ASCII) 
function foo($str) { 
    $dec = html_entity_decode($str, ENT_QUOTES, "UTF-8"); 
    //convert to UTF-16BE 
    $enc = mb_convert_encoding($dec, "UTF-16BE", "UTF-8"); 
    $out = ""; 
    foreach (str_split($enc, 2) as $f) { 
     $out .= "\\u" . sprintf("%04X", ord($f[0]) << 8 | ord($f[1])); 
    } 
    return $out; 
} 

을 만 엔티티를 교체하려는 경우, 당신은 콜백으로 foo을 사용하여 다음 엔티티에 맞게 preg_replace_callback을 사용할 수 있습니다.

function repl_only_ent($str) { 
    return preg_replace_callback('/&[^;]+;/', 
     function($m) { return foo($m[0]); }, 
    $str); 
} 

echo repl_only_ent("&euro;foobar &acute;"); 

이 제공 :

\u20ACfoobar \u00B4
+0

내 PHP 버전은 5.1.6 ... mb_convert_encoding에서 치명적인 오류가 표시됩니다 ... 어떻게 값을 얻을 수 있습니까? – Priya

+0

@PRADEEP http://php.net/manual/en/mbstring.installation을 참조하십시오. .php – Treffynnon

+0

@PRA 원하는 경우 mbstring 대신 iconv를 사용할 수 있습니다. iconv도 없다면 UTF-8을 수동으로 UTF-16으로 변환해야합니다. – Artefacto

-1

당신은 진수 변환 문자열에 대한 다음과 같은 기능을 시도 할 수 있습니다 : Greg Winiarski에서

function strToHex($string) { 
    $hex=''; 
    for ($i=0; $i < strlen($string); $i++) { 
     $hex .= dechex(ord($string[$i])); 
    } 
    return $hex; 
} 

fourth hit on Google이다.

html_entity_decode()과 조합하십시오. 이 같은 뭔가 :

$currency_symbol = "&euro;"; 
$hex = strToHex(html_entity_decode($currency_symbol)); 

이 코드는 안된 따라서 당신은

+0

-1 만 코드 포인트와 함께 작동 <= U + 00FF (예를 들어, € 실패), 심지어 다음이 \의 U00을 추가하지 않습니다. 또한 문자열을 16 진수로 변환하려면 bin2hex가 필요하며 함수가 필요하지 않습니다. – Artefacto

+0

BTW, PHP 5.4에서는 html_entity_decode의 기본값이 ISO-8859-1이 아닌 UTF-8이 될 때 더욱 화려하게 실패합니다. – Artefacto

관련 문제