PHP substr回应错误的字符

时间:2016-11-17 09:02:31

标签: php

我有一个字符串:

  

'我是大型跨国公司的一部分':关于如何升到最高位置的提示。

我想要子字符串:'我是部分

该字符串存储在名为$title

的变量中

我的代码:

<?php echo substr( $title, 0, 9 ); ?>

它会在writephponline

上返回‘I’m

并在网页上返回‘I&

出现这种情况的原因是什么?

3 个答案:

答案 0 :(得分:2)

这里的问题来自substr()不计算字符而是字节的事实。

您的输入字符串是多字节的;一个字符表示一个或多个字节。确切的数量取决于字符串的编码。最有可能是UTF-8,但只有你可以肯定地告诉它。

无论如何,问题的解决方案是mb_substr()函数,它是PHP mb extension的一部分。

答案 1 :(得分:1)

问题在于您在原始字符串中使用的引号。

如果您使用常规单引号',则会显示正确的输出:

$title = "'I'm Part of a big MNC': Tips on how you can rise to the top position.";
echo substr( $title, 0, 9 );

结果:

'I'm Part

答案 2 :(得分:1)

问题是您的数据不是ASCII。你必须使用多字节函数并告诉PHP在内部使用正确的编码,可能是UTF-8。

此示例在writephponline中按预期工作:

<?php
mb_internal_encoding("UTF-8");
$string = "‘I’m Part of a big MNC’";
var_dump(mb_substr($string, 0, 9));
//output:  string(13) "‘I’m Part"