2014-01-28 87 views
3

我想將英文數字(0,1,2,3,...)轉換爲阿拉伯數字(0,1,2,3,...)一些使用PHP函數的HTML文檔。
我寫了這個功能:將英文數字轉換爲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

使用[XML解析器來處理DOM ](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

您可以嘗試使用HTML解析器像DOM文檔。

下面是一個例子:

$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

A的什麼我的評論說大致的輪廓:

$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; 
} 
相關問題