我有一个字符串:
'我是大型跨国公司的一部分':关于如何升到最高位置的提示。
我想要子字符串:'我是部分
该字符串存储在名为$title
我的代码:
<?php echo substr( $title, 0, 9 ); ?>
上返回‘I’m
并在网页上返回‘I&
出现这种情况的原因是什么?
答案 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"