2014-09-22 15 views
7

Tôi có một chuỗi như 2 661,38 € này và tôi cần để echo 661,38 nhưng tôi không thể tiếp cận với các giải phápđịnh dạng với một chuỗi sử dụng php

Tôi đã làm đoạn mã sau:

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

Can bất cứ ai xin vui lòng giúp tôi để loại bỏ rằng 2 từ nơi đầu tiên?

Các giải pháp tôi đã không giúp đỡ tôi vì vậy tôi đặt toàn bộ mã để hiểu được tình hình tôi đã bị mắc kẹt ... xin vui lòng xem đoạn mã ... Đoạn mã trên được đưa ra cho tôi những ý sau:

Notice: undefined offset: 2 trong /var/www/html/login/str.php trên đường dây 26 0,00

+12

đâu chuỗi đến từ đâu? Dường như chuỗi UTF-8 bị hiểu sai - có thể bạn nên khắc phục sự cố mã hóa trước tiên. – georg

+0

của nó đến từ DB – user3305327

+0

Bạn sẽ được đặt thêm tải trên lớp ứng dụng, ngay cả khi điều này có thể được xử lý hiệu quả trong lớp cơ sở dữ liệu! Bạn phải thay đổi bộ ký tự cơ sở dữ liệu thành utf-8 và đối chiếu thành utf8_general_ci và sau đó unicode được cơ sở dữ liệu của bạn hỗ trợ, giúp bạn khỏi đau đầu về những gì bạn định làm bây giờ. – freerunner

Trả lời

0

Bạn chia rằng chuỗi với không gian, mười áp dụng 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

Vui lòng giải thích cách mã này giúp giải quyết vấn đề ban đầu. Mục tiêu của câu trả lời không chỉ là giải quyết vấn đề ban đầu, mà còn giúp người đọc tiếp tục của chủ đề này hiểu cả vấn đề cơ sở và giải pháp. Mã ansers chỉ được coi là bài viết chất lượng thấp. – Pred

+0

@Pred Đây có phải là giải pháp không? – Shin

+1

Nó có thể là một giải pháp, nhưng nếu ai đó đọc bài đăng này trong tương lai với kiến ​​thức hạn chế hoặc không có liên quan đến regexp hoặc php, chính mã đó có lẽ sẽ không giúp ích gì. Một giải thích ngắn gọn tại sao và làm thế nào câu trả lời này (cách regexp và mã được cung cấp) giúp hoặc giải quyết vấn đề ban đầu có thể thực sự hữu ích. – Pred

1

Nếu bạn chuyển đổi chuỗi 2 661,38 € ASCII đến các số thập lục phân, sau đó bạn sẽ thấy trình tự sau đây: 32 C2 20 36 36 31 2C 33 38 C2 20 E2 82 AC

này chuỗi trong UTF-8 là 2 661,38 € với hai ký tự điều khiển (\xC2).

Tôi nghĩ, đây là vấn đề mã hóa nghiêm ngặt, vì vậy bạn phải chuyển đổi chuỗi gốc (với bộ ký tự ban đầu) thành UTF-8.

Bạn có thể làm điều này trong MySQL với biểu thức sau đây:

CONVERT(CONVERT(YourColumn USING binary) USING utf8) 

này có lẽ trả về NULL nếu giá trị ban đầu không thể được chuyển đổi sang UTF8, nhưng nếu nó là một chuỗi UTF8 hợp lệ, sau đó nó sẽ được chuyển đổi.

Đồng thời, vui lòng đảm bảo rằng mã hóa của kết nối và tệp PHP là UTF-8. Các mã hóa khác nhau có thể dẫn đến hành vi không mong muốn.

0

Trước tiên, bạn cần thay đổi trong bảng DB của mình. Tới cấu trúc bảng của bạn và thiết lập đối chiếu sự thay đổi để utf8_general_ci, sau đó bạn cần phải thiết lập tiêu đề

0

này sẽ thoát khỏi tất cả mọi thứ trừ con số và dấu phẩy:

$number = preg_replace("/[^0-9,]*/", '', $your_weird_pattern); 
Các vấn đề liên quan