我需要将出现在给定HTML页面中的所有英文数字转换为阿拉伯语 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 :(得分: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;
答案 1 :(得分: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);
使用带有回调的正则表达式。在上面的代码中有regexp可以捕获&lt;之间的所有内容。 &GT;字符或任何单个数字。在doMap回调中,我们可以检查这是一个数字(然后将其映射到所需的字符),还是标记(然后按原样返回)。
演示:http://sandbox.onlinephpfunctions.com/code/ae39a4daaba6456740df846d23f4b5c40d9adf62