Сүүлийн үед янз бүрийн монгол вэбүүдийг харж байхад юникод бичвэр автоматаар тасалж авахдаа шууд PHP substr функц ашиглаад нөгөөдүүл нь эвдэрч харагдах нь их болжээ. Жишээлбэл computertimes.mn дээр

Өнөөдөр дэлхийн мэдээллийн технологи (МТ)-ийн зах зээл асар хурдацтайгаар хүрээгээ тэлж улам бүр глобал шинжтэй болж&nbs ; байна. Дэлхий дээр энэ салбарт зардаг мө�…

Сүүлийн 3 цэгийн өмнө UTF-8 тэмдэгт эвдэрсэн байгааг та бүхэн харж байна. Иймэрхүү асуудлуудыг засахад зориулж бичсэн дараах функцыг та бүхэнд толилуулж байна.

function utf8_substr($str, $offset, $length= false) {
preg_match_all(‘~[\x09\x0A\x0D\x20-\x7E]
| [\xC2-\xDF][\x80-\xBF]
| \xE0[\xA0-\xBF][\x80-\xBF]
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| \xF0[\x90-\xBF][\x80-\xBF]{2}
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
~xs’, $str, $match);
if ($length !== false) {
$a= array_slice($match[0], $offset, $length);
} else {
$a= array_slice($match[0], $offset);
}
return implode(”, $a);
}


17 Comments

SE · 2008/02/07 at 00:46

multibyte-tai ajillaj bgaa bol doorhi code hereg boloh baih

function strwidth($s){
$ret = mb_strwidth($s, ‘UTF-8’);
return $ret;
}
function mb_wordwrap($str, $wid, $tag){
$pos = 0;
$tok = array();
$l = mb_strlen($str, ‘UTF-8’);
if($l == 0){
return ”;
}
$flag = false;
$tok[0] = mb_substr($str, 0, 1, ‘UTF-8’);
for($i = 1 ; $i < $l ; ++$i){ $c = mb_substr($str, $i, 1, 'UTF-8'); if(!preg_match('/[a-z\'\"]/i',$c)){ ++$pos; $flag = true; }elseif($flag){ ++$pos; $flag = false; } $tok[$pos] .= $c; } $linewidth = 0; $pos = 0; $ret = array(); $l = count($tok); for($i = 0 ; $i < $l ; ++$i){ if($linewidth + ($w = strwidth($tok[$i])) > $wid){
++$pos;
$linewidth = 0;
}
$ret[$pos] .= $tok[$i];
$linewidth += $w;
}
return implode($tag, $ret);
}

$description = mb_wordwrap($item[‘description’], 25, “\n” );

Алмас · 2008/02/08 at 14:46

Баярлалаа ерөөсөө чадахгүй байсан юм.

Алмас · 2008/02/10 at 09:46

function utf8_strlen($str) {
preg_match_all(‘~[\x09\x0A\x0D\x20-\x7E]
| [\xC2-\xDF][\x80-\xBF]
| \xE0[\xA0-\xBF][\x80-\xBF]
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}
| \xED[\x80-\x9F][\x80-\xBF]
| \xF0[\x90-\xBF][\x80-\xBF]{2}
| [\xF1-\xF3][\x80-\xBF]{3}
| \xF4[\x80-\x8F][\x80-\xBF]{2}
~xs’, $str, $match);
$a = count($match[0]);
return $a;
}

Nugjii · 2008/04/19 at 06:25

Бадаагийнх дээр $offset юуг өгөх вэ?
Алмасынх дээр уртыг нь хаана оруулж өгөх вэ?

badaa · 2008/04/19 at 09:01

$offset-> haanaas ehlej taslah-iig. Ehnees ni awna gewel 0 gej ug.
Harin ene Almasyn bichsen utf8_strlen arai bish yumaa. Strlen-ii huwid arai unetei baina. Hurdan hyalbar function gewel
function utf8_strlen($str) {
return strlen(utf8_decode($str));
}
😉

Tamir · 2008/06/07 at 16:25

function _Utf8TOWin1251($str,$limit=””)
{
$str = iconv(“utf-8″,”windows-1251″,$str);
if(limit!=””) $str = substr($str,0,$limit);
$str = iconv(“windows-1251″,”utf-8”,$str);
return $str;
}

Za ene n arai oilgomjtoi ym uu daa 🙂

badaa · 2008/06/07 at 18:05

Hi Tamir,
yag iim function-oos bolood iim ewdreltei asuudal garaad baigaa yum. Chinii function iconv heregleed dan byte ruu hurwuuleed tendeesee taslaad butsaagaad double byte bolgoj baina. Yag ene ued l deerh aldaa garaad baigaa yum. Uchir ni textend 1, 2 byte temdegtuud holildood orchihoor deerhi function guarentee ugch chadahgui bolchihoj baigaa yum…

Tamir · 2008/06/08 at 13:28

Sain bna yy Badaa?

bi deer duridsan evderch bgaa asuudlaas uuden deerh function bichsen ym. Umnu n yag computertimes deer garch bgaa shik evdrel garaad uuriin tani bichsen unicode gej uu ve, gar herhen ajildag ve geeed zarim article-iig unshsan ym. Gehdee odoo hurtel yag sain uchriig n oloogui ee, my bad.

Gehdee _Utf8TOWin1251 function maani yamar ch bsan asuudalgui ajillaj bgaa ym. Odoogoor evdrel garsan tohioldol garaagui l bna.

utf8-aas 1251 hurvuulj heregtei urtaa taslaj avaad butsaagaad utf8 bolgoj convert hiisen sanaatai ym oo.

Bayarlalaa

Алмас · 2008/08/17 at 11:02

Сайн байна уу,
Өөрөөс чинь нэг зүйл гуйх гэсэн юмаа. Үг эсвэл текстийг таслахдаа линк болоод бусад html кодыг дундуур нь таслаад байх юмаа.

html code эвдэггүй мөртлөө

1. wordwrap буюу үгний урт богиносгодог
2. substr буюу текстийг тасалдаг

utf8 дээр зүгээр бас, html код эвддэггүй ийм функцууд байхгүй биз? Би өөрөө бас сайн мэдэхгүй болохоор чадахгүй юмаа. Туслаач.

Tamir · 2009/01/04 at 05:14

Sain bna yy?

Uurt tani shine onii mendiig hurgie.

Mysql deer utf8 asuudaltai uchirchehaad uurt tani handaj bna.

nadad mysql-iin 2 table bgaa ym. Neg n barag 30000 orchim bichlegtei nuguu n 11000 orchim bichlegtei.

Shiidej chadahgui bgaa asuudal maani:

2 table-aas join hiij ugugdul delgets deer hevleheer neg table-iig n bichleg unshigdaad nuguuhiih n unshigdahgui arzgar garaad bdag.

@mysql_query(“SET CHARACTER_SET_RESULTS=utf8”);

tavihaar neg n zugeer nuguu n arzgar.

Yaj 2 table-aa neg encoding-toi bolgoh ve?

Bayarlalaa

badaa · 2009/01/04 at 17:03

mysql_query(‘SET NAMES “utf8″‘, $yourdbConn);

Bayarhuu · 2009/03/08 at 07:23

eee…
gants ug taslahiin tuld yaasan urt yum bichitsgeedegiim be?

mb_internal_encoding(“UTF-8”);
echo mb_substr($str,5,1);

ingeel zohitsuulchihaj boldoggui yum uu?

Bayarhuu · 2009/03/08 at 07:28

eee….
humuusee gants ug taslahiin tuld yamar urt yum bichitsgeedegiim be?

mb_internal_encoding(“UTF-8”);
echo mb_substr($str,5,1);

ingeed yavchihaj boldoggui yum uu?

badaa · 2009/04/12 at 11:04

bolno. Gehdee mb extention suugaagui ued mb_substr ajillahgui. Mun deer bichsen mb_* function ashiglasan buh nuhud herew PHP unicode function neelttei baigaa bol medeej bi iim zuil hiihgui baisnyg bolgoono uu. iconv-ch yalgaagui.
Zugeer l uuruu ajillachihdag raw function bichihiig zorison uymaa bi.

lwcc_enhee · 2010/04/30 at 15:19

Хэй. Хүмүүсээ preg_match_all(‘/(.*?)/’, $song_array_tmp[$i], $arr_tmp, PREG_SET_ORDER) гэсний ‘/(.*?)/’ нарийн тэмдгэлгээнүүдийг ер ойлгохгүй юмаа * /\?” гэх мэт.

badaa · 2010/04/30 at 15:43

Энэ блогт хаа нэгтэй би ийм энгийн илэрхийллийн тухай маш товч бичиж байсан. Та хайгаад үзнэ үү.

lwcc_enhee · 2010/05/01 at 13:25

Таны блогийг бүхэлд нь уншлаа. Олж чадсангүй ээ… За за боломжтой бол нэг тайлбарлаад өгөөрэй. Зав байвал л гэсэн үг л дээ. Би дөнгөж л PHP үзэж эхэлж байгаа юмаа. Хамгийн гол нь би гадаад хэлгүй болохоор л… Хэ хэ… Таньд монгол хэл дээр ойр зуурын анхан шатны PHP заавар байвал өгч тус болоорой.

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *