10/10/2018, 09:25
Đọc nội dung từ file unicode trên server và trả về chuỗi có thể dùng preg_match được như thế nào?
Chào mọi người.
Mình có một file trên server save dưới dạng unicode, trong đó chứa các chữ tiếng Việt. Đuôi file có thể là *.txt hoặc *.tpl v.v.v. (tóm lại là dạng text).
Bây giờ mình muốn đọc nội dung trên vào một biến, sau đó dùng preg_match với biến này để lấy kết quả cần dùng. Tuy nhiên không được như ý muốn.
Ví dụ mình có file: needcontent.tpl
Và nội dung cần lấy là các chuỗi định dạng ngày tháng 01/11/2008 và 23/12/2007
Mình đã dùng các cách:
và
đều thất bại, kết quả trả về là trắng! chưa thử với CURL.
Lưu ý:
+ Nếu thêm
thì vẫn trả về toàn bộ nội dung của file needcontent.tpl
+ Preg pattern chuẩn, đã test với biến khai báo sẵn, ví dụ:
Vui lòng giúp đỡ. Thanks
Mình có một file trên server save dưới dạng unicode, trong đó chứa các chữ tiếng Việt. Đuôi file có thể là *.txt hoặc *.tpl v.v.v. (tóm lại là dạng text).
Bây giờ mình muốn đọc nội dung trên vào một biến, sau đó dùng preg_match với biến này để lấy kết quả cần dùng. Tuy nhiên không được như ý muốn.
Ví dụ mình có file: needcontent.tpl
Code:
Mình có một file trên server save dưới dạng unicode, trong đó chứa các chữ tiếng Việt. Đuôi file có thể là *.txt hoặc *.file v.v.v. (tóm lại là dạng text). 01/11/2008 23/12/2007
Mình đã dùng các cách:
PHP Code:
ob_start();
include "root/needcontent.tpl";
$contents = ob_get_contents();
ob_clean();
preg_match_all('#d{2}/d{2}/d{4}#si', $contents, $time);
print_r($time);
PHP Code:
$handle = fopen("root/needcontent.tpl", 'r');
$contents = fread($handle, filesize("root/needcontent.tpl"));
fclose($handle);
preg_match_all('#d{2}/d{2}/d{4}#si', $contents, $time);
print_r($time);
đều thất bại, kết quả trả về là trắng! chưa thử với CURL.
Lưu ý:
+ Nếu thêm
PHP Code:
echo $contents;
+ Preg pattern chuẩn, đã test với biến khai báo sẵn, ví dụ:
PHP Code:
$contents = "For test 01/11/2008 23/12/2007";
Bài liên quan
<?php
$contents = "Mình có một file trên server save dưới dạng unicode, trong đó chứa các chữ tiếng Việt. Đuôi file có thể là *.txt hoặc *.file v.v.v. (tóm lại là dạng text).
01/11/2008
23/12/2007";
preg_match_all('|***91;0-9***93;{2}/***91;0-9***93;{2}/***91;0-9***93;{2}|', $contents, $time);
print_r($time);
?>
http://vn.php.net/manual/en/function.ob-end-clean.php
[=========> Bổ sung bài viết <=========]
Các bạn chú ý dòng chữ đỏ nhé.
...
Để minh họa cụ thể hơn, các bạn load file này: http://coder.com.vn/ddth/try.txt về và đọc nội dung, tách ra được cụm ngày tháng cần thiết là 01/11/2008 và 23/12/2007 xem nhé.
rồi dùng mb_convert_encoding
$str = file_get_contents('http://coder.com.vn/ddth/try.txt');
$str = mb_convert_encoding($str, "UTF-8", "unicode");
preg_match_all('#\d{2}/\d{2}/\d{4}#si', $str, $time);
print_r($time);
$str = mb_convert_encoding($str, "UTF-8", "unicode");
Hàm file_get_content tốn nhiều resource nên mình chuyển qua dùng như sau:
//$contents = file_get_contents($fullFilepath);
$handle = fopen($fullFilepath, 'r+b');
$contents = fread($handle, filesize($fullFilepath));
fclose($handle);
$contents = mb_convert_encoding($contents, "UTF-8", "unicode");
//var_dump($contents);
preg_match_all('#\d{2}/\d{2}/\d{4}#si', $contents, $time);
print_r($time);
[=========> Bổ sung bài viết <=========]
Hiện tại đang test code do @web20 vn cung cấp từ PHPVietnam Group.
<?php
$encoding = '';
$handle = fopen('http://coder.com.vn/ddth/try.txt', 'r');
if($handle) {
$bom_value = fread($handle, 2);
rewind($handle);
if($bom_value === chr(0xff).chr(0xfe) || $bom_value === chr(0xfe).chr(0xff)){
$encoding = 'UTF-16';
} else {
fread($handle, 1000) + 'e';
rewind($handle);
$encoding = mb_detect_encoding(NULL, 'UCS-2, UTF-8, UTF-7, ASCII');
}
if (!empty($encoding)) {
stream_filter_append($handle, 'convert.iconv.'.$encoding.'/UTF-8');
}
while (!feof($handle)) {}
fclose($handle);
}
echo $contents;
echo '<br />';
preg_match_all('#\d{2}/\d{2}/\d{4}#si', $contents, $time);
print_r($time);
exit();
?>