带有特殊字符(如德语Umlauteä;)的php subströ;和ü;

带有特殊字符(如德语Umlauteä;)的php subströ;和ü;,php,Php,我想将文本字符串裁剪为三个字符。这样做时,使用$name\u short=substr($name,0,3)非常有效。但由于文本在前三个字符中包含类似于ä、ö或ü的德语Umlaute,因此,Würzburg被缩短为W&u。使用$name\u short=substr(html\u entity\u decode($name),0,3)很好地工作并保持了Umlaute,但结果不是Wür(对于Würzburg),而是Wü。我不知道如何if/else正确地检查代码的前三个字符中是否有来自其他语言的Um

我想将文本字符串裁剪为三个字符。这样做时,使用
$name\u short=substr($name,0,3)非常有效。但由于文本在前三个字符中包含类似于ä、ö或ü的德语Umlaute,因此,Würzburg被缩短为W&u。使用
$name\u short=substr(html\u entity\u decode($name),0,3)
很好地工作并保持了Umlaute,但结果不是Wür(对于Würzburg),而是。我不知道如何if/else正确地检查代码的前三个字符中是否有来自其他语言的Umlaute或其他特殊字符

因此,如果找到特殊字符,我可以将字符串裁剪为4个字符,否则裁剪为3个字符

这使它起作用:

$name = html_entity_decode($name);
$name_short = mb_substr($name, 0, 3);

谢谢你的帮助

这可能是一个编码问题


您可以尝试
mb_substr($name,0,3,'UTF-8')

这可能是编码问题


您可以尝试
mb_substr($name,0,3,'UTF-8')

问题源于这些特殊字符(如ä、ö、ü、œ和其他字符)使用多个字节。因此,使用
substr()
得到的结果在技术上是正确的,因为它返回一个3字节长的字符串

使用多字节版本的函数可以解决此问题:
$name\u short=mb\u substr($name,0,3)

此外,正如@arkascha所提到的,使用
html\u entity\u decode()
对您的情况没有帮助,因为它不会影响特殊字符


mb_substr
doc:

问题源于这些特殊字符(如ä、ö、ü、œ等)使用多个字节。因此,使用
substr()
得到的结果在技术上是正确的,因为它返回一个3字节长的字符串

使用多字节版本的函数可以解决此问题:
$name\u short=mb\u substr($name,0,3)

此外,正如@arkascha所提到的,使用
html\u entity\u decode()
对您的情况没有帮助,因为它不会影响特殊字符

mb_substr
doc:

尝试mb_substr()而不是substr(),如下所示:

$name = "Würzburg"; $name_short = mb_substr($name, 0, 3); $name=“Würzburg”; $name\u short=mb\u substr($name,0,3); 尝试使用mb_substr()代替substr(),如下所示:

$name = "Würzburg"; $name_short = mb_substr($name, 0, 3); $name=“Würzburg”; $name\u short=mb\u substr($name,0,3);
html\u entity\u decode()
与此无关,但您需要注意了解unicode(UTF)在您的设置中是如何工作的,以及如何利用php提供的“多字节字符串函数”。这方面有官方文件。阅读本主题很有意义…
html\u entity\u decode()
与此无关,但您需要注意了解unicode(UTF)在您的设置中是如何工作的,以及如何利用php提供的“多字节字符串函数”。这方面有官方文件。读懂这个主题是有意义的……这就像你写的一样有效。但是“Würzburg”来自一个变量,结果仍然是“W&U”。您好,这是因为您可能正在使用旧版本的php(小于5.6)。它可以在PHP5.6和PHP7.0上运行。这与您编写的一样有效。但是“Würzburg”来自一个变量,结果仍然是“W&U”。您好,这是因为您可能正在使用旧版本的php(小于5.6)。它适用于PHP5.6和PHP7.0。