字符串末尾带有破折号不允许json_encode

fra*_*al5 0 php json utf-8 mb-convert-encoding

我正在尝试使用substr($originalText,0,250); 从字符串中提取n个字符 ;

第n个字符是一个破折号。因此,当我在记事本中查看时,最后一个字符为–。在我的编辑器Brackets中,我什至无法打开日志文件,因为它仅支持UTF-8编码。

我也无法在此字符串上运行json_encode。

但是,当我使用时substr($originalText,0,251),它可以正常工作。我可以打开日志文件,它显示一个破折号而不是â€。json_encode也可以正常工作。

我可以使用它mb_convert_encoding($mystring, "UTF-8", "Windows-1252")来规避问题,但是谁能告诉我为什么最后加上这些字符会导致错误?此外,在执行此操作时,我的日志文件在方括号中显示“ –”,这也令人困惑。

我的问题是,为什么在字符串的末尾加上破折号,而不是在其他任何地方(后跟其他字符)。

希望我的问题很清楚,否则我可以尝试进一步解释。

谢谢。

Dez*_*zza 5

Pid的答案说明了为什么会发生这种情况,这个答案只是着眼于您可以采取的措施...

使用mb_substr()

多字节字符串模块的设计正是这种情况,而手柄多字节字符正确地提供了大量的字符串函数。我建议浏览一下那里,因为在应用程序的其他地方可能还需要其他内容。

如果出现找不到功能错误,则可能需要安装或启用此模块。对此的说明取决于平台,并且不在此问题范围之内。

您要针对问题中的情况调用的mb_substr()函数的调用方式与您使用的函数相同substr(),但是具有其他可选参数。