2014-09-22 4 views
7

У меня есть строка, как этот 2 661,38 € и мне нужно повторить 661,38, но я не могу добраться до решенияформатирование с помощью строки с помощью PHP

Я сделал следующий код:

$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;?> 

Может кто-нибудь, пожалуйста, помогите мне удалить это 2 с первого места?

Решение, которое я получил, не помогает мне, так что я кладу весь код, чтобы понять ситуацию, я застрял ... смотрите на фрагмент кода ... Приведенный выше код дает мне следующее уведомление:

Примечание: Undefined смещение: 2 в /var/www/html/login/str.php на линии 26 0,00

+12

Где строка взялась? Это похоже на неверно истолкованную строку UTF-8 - возможно, сначала вы должны исправить проблемы с кодировкой. – georg

+0

его выход из базы данных – user3305327

+0

Вы будете наносить больше нагрузки на прикладной уровень, даже если это можно эффективно обрабатывать в слое базы данных! Вы должны изменить набор символов базы данных на utf-8 и сопоставление с utf8_general_ci, а затем unicode поддерживаются вашей базой данных, избавляя вас от головной боли того, что вы намереваетесь сделать сейчас. – freerunner

ответ

0

Вы разделить эту строку с пространством, десять применить preg_replace()

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

DEMO

+1

Пожалуйста, объясните, как этот код помогает решить исходную проблему. Задача ответов заключается не только в решении исходной проблемы, но и в том, чтобы помочь читателям этой темы понять как основную проблему, так и решение. Абоненты только для кода считаются сообщениями низкого качества. – Pred

+0

@Pred Это не решение? – Shin

+1

Это может быть решение, но если кто-то прочитает этот пост в будущем с ограниченными или нулевыми знаниями, связанными с regexp или php, сам код, вероятно, не поможет. Краткое объяснение, почему и как этот ответ (как предоставленное регулярное выражение и код) помогает или решает исходную проблему, может быть действительно полезным. – Pred

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) 

Это, вероятно, возвращает NULL, если исходное значение не может быть преобразовано в UTF8, но если он является действительной последовательностью UTF8, то будет преобразован.

Также, пожалуйста, убедитесь, что кодировка соединения и файла PHP является UTF-8. Различные кодировки могут привести к неожиданному поведению.

0

Сначала вам нужно изменить в таблице DB. Перейти к вашей структуре таблицы и настройке параметров сортировки изменения в utf8_general_ci, то вам необходимо установить заголовок

0

Это позволит избавиться от всего, кроме цифр и запятых:

$number = preg_replace("/[^0-9,]*/", '', $your_weird_pattern); 
Смежные вопросы