2014-01-28 10 views
3

영어 숫자 (0,1,2,3, ...)를 아랍어 숫자 (0,1,2,3, ...)로 변환하고 싶습니다. 일부 HTML 문서는 PHP 함수를 사용합니다.
나는이 기능을 썼다 :html 문서에서 영어 숫자를 아랍어 숫자로 변환합니다.

function en2ar($str) { 
    $ends = array('0','1','2','3','4','5','6','7','8','9'); 
    $ards = array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'); 
    return str_replace($ends,$ards,$str); 
} 

을하지만이 문서의 내용 만 숫자를 변환 할 동안은 문서에있는 모든 숫자를 변환합니다.

<h1 style="color: #333;">1</h1> 
<div style="width: 180px;">2</div> 

에 : 예를 들어
, 나는 변환 할

<h1 style="color: #333;">۱</h1> 
<div style="width: 180px;">۲</div> 

하지만로 변환 :

<h۱ style="color: #۳۳۳;">۱</h۱> 
<div style="width: ۱۸۰px;">۲</div> 

하고 문서가 유효합니다. 내 댓글이 말의

+0

를 사용하여 DOM을 처리 할 수있는 [XML 파서 ] (http://www.php.net/manual/en/class.domdocument.php), [텍스트 노드 찾기] (http://stackoverflow.com/a/76) 8800/2908724) 필요에 따라 업데이트하십시오. – bishop

+0

오프 주제 : 워! 나는 아랍어 숫자가 1,2,3 ...라고 생각했다. – Tivie

+0

정규 표현식을 사용하는 것이 낫지 않습니까? – Pourbahrami

답변

1

당신은있는 DOMDocument 같은 HTML 파서를 사용하여 시도 할 수 있습니다.

$html = 
'<!DOCTYPE HTML> 
<html> 
<head></head> 
<body> 
    <h1 style="color: #333;">1</h1> 
    <div style="width: 180px;">2</div> 
</body> 
</html>'; 

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$doc->encoding = 'UTF-8'; //Appropriate encoding HERE 
$root = $doc->documentElement; 

var_dump($doc->saveHTML()); 
iterate($root); 
var_dump($doc->saveHTML()); 

function iterate($node) 
{ 
    if($node->nodeType === XML_TEXT_NODE) { 
     $node->nodeValue = en2ar($node->nodeValue); 
    } 
    if ($node->hasChildNodes()) { 
     $children = $node->childNodes; 
     foreach($children as $child) { 
      iterate($child); 
     } 
    } 
} 

변수 사용에 출력을 저장하려면 : 여기

은 예입니다

$var = $doc->saveHTML();

출력 :

string '<!DOCTYPE HTML> 
<html><head></head><body> 
    <h1 style="color: #333;">1</h1> 
    <div style="width: 180px;">2</div> 
</body></html> 
' (length=135) 
string '<!DOCTYPE HTML> 
<html><head></head><body> 
    <h1 style="color: #333;">۱</h1> 
    <div style="width: 180px;">۲</div> 
</body></html> 
' (length=147) 
0

대략적인 개요 :

$doc = new DOMDocument(); 
$doc->loadHTML('<h1 style="color: #333;">1</h1><div style="width: 180px;">2</div>'); 

$xpath = new DOMXPath($doc); 
$textnodes = $xpath->query('//text()'); 

foreach ($textnodes as $textnode) { 
    $textnode->nodeValue = en2ar($textnode->nodeValue); 
} 

echo $doc->saveHTML(); 

주의 할의 위험 부담 : 검증되지 않은. 알고리즘은 간단합니다 : dom을로드하고, 텍스트 노드를 얻고, 각각의 값을 변경하고, 수정 된 dom을 저장합니다.

0

는만큼 당신이 태그에 사용되는 것 외에 더 ><\이 없다,이 태그 내의 모든 번호를 대체합니다 :

function en2ar ($str) { 
    $ends = array('0','1','2','3','4','5','6','7','8','9'); 
    $ards = array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'); 
    foreach ($ends as $key => $num) { 
     $str = preg_replace('/(>.+)('.$num.')(.+<\/)/','$1'.$ards[$key].'$3',$str); 
    } 
    return $str; 
} 
관련 문제