Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
791 views
in Technique[技术] by (71.8m points)

encoding - PHP: Is it possible to correctly SUBSTR a UTF-8 string?

I have (in an SQLite database) the following string:

Лампа в вытяжке на кухне меняется, начиная с вытаскивания белого штырька справа.

The string is correctly shown by PHP using print. I would like to obtain just the first 50 chars of this string, i.e.

Лампа в вытяжке на кухне меняется, начиная с вытас.

I have tried using both the substr and mb_substr, and get

Лампа в вытяжке на кухне ме?, i.e. only 28 chars.

After reading here and elsewhere about the problems of mbstring, I realise that this is actually a 50 byte string (22 Russian chars = 44 bytes plus 5 spaces plus 1 question symbol).

Is there any nice solution to this? All my strings are UTF-8, so I could of course program a substr-function myself, by checking the first bit of every byte etc. But this should surely have been done before, right?

UPDATE: I believe mb_substr does not work properly because mb_detect_encoding() does not work properly.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

See below URL:

Extracting a substring from a UTF-8 string in PHP

http://osc.co.cr/extracting-a-substring-from-a-utf-8-string-in-php/

PHP substring with UTF-8

http://greekgeekz.blogspot.in/2010/11/php-substring-with-utf-8.html

Or try it:

Example #1

$str1 = utf8_encode("Feliz día");

$str2 = substr($str1, 0, 9);

echo utf8_decode($str2); 

// will output Feliz d?

Example #2

$str3 = mb_substr($str1, 0, 9, 'UTF-8');

echo utf8_decode($str3); 

// will output Feliz dí

As of PHP >= 5.3 you can also declare the encoding directive and use the substr function

Example #3

declare(encoding='UTF-8');

$str4 = "Feliz día";

$str5 = substr($str4, 0, 9);echo $str5;


// will output Feliz dí

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...