使用php格式化字符串

时间:2014-09-22 10:28:57

标签: php mysql

我有一个像2 661,38 €这样的字符串,我需要回复661,38,但我无法达到解决方案

我已完成以下代码:

$connection=mysql_connect('localhost','root','****') or die(mysql_error());

mysql_select_db('DB',$connection) or die(mysql_error());

$sql = mysql_query("select distinct prod_price COL from TABLE") or die(mysql_error());

?>

<?php 
  while($row=mysql_fetch_object($sql)):?>

<?php


if(mysql_num_rows($sql)>0){

$number = $row->COL;
 $temp=explode(' ',$number);
 $number = preg_replace("/[^0-9]/", '', $temp[0])/100;
 echo number_format($number, 2, ',', ' '). "<br />";
}
?>
  <?php endwhile;?>

有人可以帮我从第一个地方删除那个吗?

我得到的解决方案并没有帮助我,所以我将整个代码用于了解我遇到的情况......请参阅代码片段......上面的代码给了我以下注意事项:

注意:未定义的偏移量:第26行/var/www/html/login/str.php中的2 0,00

4 个答案:

答案 0 :(得分:1)

如果将2 661,38 € ASCII字符串转换为十六进制数字,则会看到以下序列:32 C2 20 36 36 31 2C 33 38 C2 20 E2 82 AC

UTF-8中的此序列为2 661,38 €,带有两个控制字符(\xC2)。

我认为,这严格来说是编码问题,因此您必须将原始字符串(使用原始字符集)转换为UTF-8。

您可以使用以下表达式在MySQL中执行此操作:

CONVERT(CONVERT(YourColumn USING binary) USING utf8)

如果原始值无法转换为UTF8,则可能返回NULL,但如果它是有效的UTF-8序列,则它将被转换。

另外请确保连接和PHP文件的编码也是UTF-8。不同的编码可能会导致意外行为。

答案 1 :(得分:0)

用空格分割该字符串,10应用preg_replace()

<?php
 $number = "2 661,38 €";
 $temp=explode(' ',$number);
 $number = preg_replace("/[^0-9]/", '', $temp[1])/100;
 echo number_format($number, 2, ',', ' ');
 ?>

<强> DEMO

答案 2 :(得分:0)

首先,您需要更改DB表。转到表结构并将排序规则设置更改为utf8_general_ci,然后需要设置标题

答案 3 :(得分:0)

这将除掉数字和逗号之外的所有内容:

$number = preg_replace("/[^0-9,]*/", '', $your_weird_pattern);