Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP substr()函数未按预期工作_Php_String - Fatal编程技术网

PHP substr()函数未按预期工作

PHP substr()函数未按预期工作,php,string,Php,String,我正在删除字符串的第一个字符,并使用substr();功能 例如: <?php $amount = '€300'; echo substr($amount ,1); ?> 这段代码做得很好,但是有一些bug。当我显示substr()函数应用的字符串时,它会在字符串的开头显示其他符号。下图有输出 在上图中,您可以看到它显示了不需要的符号。但当我再次应用substr()函数时,它成功地工作了 我只是想知道为什么这个函数有那个符号?这个符号是什么意思?为什么它会出现在输出中 我通过

我正在删除字符串的第一个字符,并使用substr();功能
例如:

<?php
$amount =  '€300';
echo substr($amount ,1);
?>

这段代码做得很好,但是有一些bug。当我显示substr()函数应用的字符串时,它会在字符串的开头显示其他符号。下图有输出

在上图中,您可以看到它显示了不需要的符号。但当我再次应用substr()函数时,它成功地工作了

我只是想知道为什么这个函数有那个符号?这个符号是什么意思?为什么它会出现在输出中

我通过使用
utf8\u decode
解决了这个问题,即:

$amount =  utf8_decode('€300');
echo substr($amount ,1);
//300

您可以使用
mb\u substr()
php函数



在PHPFiddle中似乎也能正常工作。这可能是php设置和配置的问题。这看起来好像您试图将8位函数应用于utf编码的字符串,但这肯定不起作用。请阅读php中的unicode支持以及
mbstring
扩展和“函数重载”`。问题似乎发生在
符号上,而不是发生在
$
上。当您从多字节字符中删除一个字节时,会发生这种情况。对于多字节编码的字符串(例如UTF-8),应该使用多字节感知字符串函数(
mb*
)。
<?php
$amount =  '€300';
echo mb_substr($amount, 1, NULL, "UTF-8");
?>