带有 utf-8 的 php substr() 函数留下 �标记在最后

发布于 2025-01-01 08:11:12 字数 616 浏览 0 评论 0原文

这是简单的代码

<?php

$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных        продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";

$foo = substr($var,0,142);

echo $foo;
?>

,它输出如下内容:

Бензин Офиси А.С。 。

我尝试了 mb_substr() 但没有成功 如何以正确的方式做到这一点?

Here is simple code

<?php

$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных        продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";

$foo = substr($var,0,142);

echo $foo;
?>

and it outputs something like this:

Бензин Офиси А.С. также производит все типы жира и смазок и их побочных продук�...

I tried mb_substr() with no luck. How to do this the right way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

赢得她心 2025-01-08 08:11:12

只要您的服务器上启用了 mbstring,上面的注释就是正确的。

$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных        продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";

$foo = mb_substr($var,0,142, "utf-8");

这是 php 文档:

http://php.net/manual/en/book.mbstring。 php

The comments above are correct so long as you have mbstring enabled on your server.

$var = "Бензин Офиси А.С. также производит все типы жира и смазок и их побочных        продуктов в его смесительных установках нефти машинного масла в Деринце, Измите, Алиага и Измире. У Компании есть 3 885 станций технического обслуживания, включая сжиженный газ (ЛПГ) станции под фирменным знаком Петрогаз, приблизительно 5 000 дилеров, двух смазочных смесительных установок, 12 терминалов, и 26 единиц поставки аэропорта.";

$foo = mb_substr($var,0,142, "utf-8");

Here's the php docs:

http://php.net/manual/en/book.mbstring.php

橘虞初梦 2025-01-08 08:11:12

unicode 字符串的正确(逻辑)替代方案;

<?php
function substr_unicode($str, $s, $l = null) {
    return join("", array_slice(
        preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}

$str = "Büyük";
$s = 0; // start from "0" (nth) char
$l = 3; // get "3" chars
echo substr($str, $s, $l) ."\n";    // Bü
echo mb_substr($str, $s, $l) ."\n"; // Bü
echo substr_unicode($str, $s, $l);  // Büy
?>

使用 PHP: mb_substr - 手册

A proper (logical) alternative for unicode strings;

<?php
function substr_unicode($str, $s, $l = null) {
    return join("", array_slice(
        preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY), $s, $l));
}

$str = "Büyük";
$s = 0; // start from "0" (nth) char
$l = 3; // get "3" chars
echo substr($str, $s, $l) ."\n";    // Bü
echo mb_substr($str, $s, $l) ."\n"; // Bü
echo substr_unicode($str, $s, $l);  // Büy
?>

Use the PHP: mb_substr - Manual

纵情客 2025-01-08 08:11:12

如果您的字符串可能包含 Unicode(多字节)字符并且您不想破坏这些字符,请根据您的需要将 substr 替换为以下两个字符之一:

限制为 142字符

mb_substr($var, 0, 142);

限制为142 字节

mb_strcut($var, 0, 142);

If your strings may contain Unicode (multi-byte) characters and you don’t want to break these, replace substr with one of the following two, depending on what you want:

Limit to 142 characters:

mb_substr($var, 0, 142);

Limit to 142 bytes:

mb_strcut($var, 0, 142);
墨落成白 2025-01-08 08:11:12

PHP5 本身并不理解 UTF-8。如果 PHP6 发布的话,建议将其用于 PHP6。

使用多字节字符串函数安全地操作 UTF-8 字符串。

例如,您的情况是 mb_substr()

PHP5 does not understand UTF-8 natively. It is proposed for PHP6, if it ever comes out.

Use the multibyte string functions to manipulate UTF-8 strings safely.

For instance, mb_substr() in your case.

格子衫的從容 2025-01-08 08:11:12

如果您想使用 strlen 函数来计算要返回的字符串长度,并且您的字符串 $word 具有 UTF-8 编码,你必须使用 mb_strlen() 函数:

$foo = mb_substr($word, 0, mb_strlen($word)-1);

If you want to use strlen function, to calculate length of string, which you want to return and your string $word has UTF-8 encoding, you have to use mb_strlen() function:

$foo = mb_substr($word, 0, mb_strlen($word)-1);

不打扰别人 2025-01-08 08:11:12

切勿在 substr 函数中对 UTF-8 字符串使用常量:

$st = substr($text, $beg, 100);

50% 的机会您会在字符串末尾得到半个字符。

这样做:

$postion_degin = strpos($text, $first_symbol);
$postion_end = strpos($text, $last_symbol);
$len = $postion_end - $postion_degin + 1;
$st = substr($text, $postion_degin, $len);

100% 安全的结果。

没有mb_substr

Never use constant in substr function for UTF-8 string:

$st = substr($text, $beg, 100);

50% chance you will get half of a character at end of the string.

Do it like this:

$postion_degin = strpos($text, $first_symbol);
$postion_end = strpos($text, $last_symbol);
$len = $postion_end - $postion_degin + 1;
$st = substr($text, $postion_degin, $len);

100% safe result.

No mb_substr.

秉烛思 2025-01-08 08:11:12

我希望这个解决方案对您有所帮助,因为它对我帮助很大。

<?php
if(mb_strlen($post->post_content,'UTF-8')>200){
    $content= str_replace('\n', '', mb_substr(strip_tags($post-> post_content), 
                          0, 200,'UTF-8'));
    echo $content.'…';
}else{
    echo str_replace('\n', '', strip_tags($post->post_content));
}
?>

I hope this solution help you as it helped me a lot.

<?php
if(mb_strlen($post->post_content,'UTF-8')>200){
    $content= str_replace('\n', '', mb_substr(strip_tags($post-> post_content), 
                          0, 200,'UTF-8'));
    echo $content.'…';
}else{
    echo str_replace('\n', '', strip_tags($post->post_content));
}
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文