2017-01-07 121 views
0

我需要將出現在給定HTML頁面中的所有英文數字轉換爲阿拉伯語,PHP,我嘗試了下面的代碼,但它轉換所有數字,甚至是內部元素。我只想在元素之間轉換數字。怎麼樣?PHP將拉丁數字轉換爲阿拉伯語

function number2($srting) 
{ 
    $Persian_Number = str_replace(
    array('0','1','2','3','4','5','6','7','8','9'), 
    array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'), 
    $srting 
    ); 
    return $Number; 
} 
$html = '<div class="span5" style="margin-right: 5em;">hi 74 tnx 541 o Arabic542354</div>'; 
echo number2($html); 

DEMO:http://sandbox.onlinephpfunctions.com/code/1265f3cc25552e7326751c603edab9d12686be5f

這回是:<div class="span۵" style="margin-right: ۵em;">hi ۷۴ tnx ۵۴۱ o Arabic۵۴۲۳۵۴</div>

我不希望它。

我希望它爲:<div class="span5" style="margin-right: 5em;">hi ۷۴ tnx ۵۴۱ o Arabic۵۴۲۳۵۴</div>

當然,這是一個小例子。

回答

0
<?php 
function doMap($input) 
{ 
    if (strlen($input[0]) > 1) { 
     return $input[0]; 
    } else { 
     $map = array('0' => '۰', '1' => '۱', '2' => '۲', '3' => '۳', '4' => '۴', '5' => '۵', '6' => '۶', '7' => '۷', '8' => '۸', '9' => '۹'); 
     return $map[$input[0]]; 
    } 
} 

function number2farsi($srting) 
{ 
    $Persian_Number = preg_replace_callback('/\<.*?\>|[0-9]/', 'doMap', $srting); 
    return $Persian_Number; 
} 
$html = '<div class="span5" style="margin-right: 5em;">hi 74 tnx 541 o Arabic542354</div>'; 
echo number2farsi($html); 

使用正則表達式,有回調。在上面的代碼中,有正則表達式可以捕獲<>字符或任何單個數字之間的所有內容。在doMap回調函數中,我們可以檢查它是否是一個數字(然後將它映射到所需的字符)還是標記(然後按原樣返回)。

演示:http://sandbox.onlinephpfunctions.com/code/ae39a4daaba6456740df846d23f4b5c40d9adf62

+0

給我這個消息:'preg_replace_callback():需要參數2,'doMap'是一個有效的回調' –

+0

在什麼版本的PHP下?你是否複製了所有給定的代碼?它在我發佈的演示中工作 - 請再次檢查。 – Vir

+0

PHP版本5.6.28, –

0

然後,你需要添加的div容器像下面前致電number2farsi:

<?php 
function number2farsi($srting) 
{ 
    $Persian_Number = str_replace(
    array('0','1','2','3','4','5','6','7','8','9'), 
    array('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'), 
    $srting 
    ); 
    return $Persian_Number; 
} 

$text = 'hi 74 tnx 541 o Arabic542354'; 
$farsi = number2farsi($text); 
$html = '<div class="span5" style="margin-right: 5em;">' . $farsi . '</div>'; 
echo $html; 

短:

$text = 'hi 74 tnx 541 o Arabic542354'; 
$html = '<div class="span5" style="margin-right: 5em;">' . number2farsi($text) . '</div>'; 
echo $html; 
+0

我知道了,它是什麼與html標籤? –

+0

如果對整個字符串進行更改,它將更改所有數字。所以span5,5em,所有這些轉換。您需要在實際文本上進行轉換,而不是在頁面上打印的html文本上進行轉換。 – smozgur