2017-01-07 122 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