php substr,包含德语Umlauteä,ö和ü等特殊字符

时间:2017-02-24 13:05:35

标签: php

我想将文字字符串裁剪为三个字符。这样做,使用$name_short = substr($name, 0, 3);效果很好。但正如文本在前三个字符中包含ä,ö或ü等德语元音,例如Würzburg缩短为 W& u 。使用$name_short = substr(html_entity_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);

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

这可能是编码问题......

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

答案 1 :(得分:1)

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

使用该函数的多字节版本应解决该问题: $name_short = mb_substr($name, 0, 3);

另外,正如@arkascha所提到的,使用html_entity_decode()对你的情况没有帮助,因为它不会影响特殊字符。

mb_substr doc:http://php.net/manual/en/function.mb-substr.php

答案 2 :(得分:1)

尝试使用mb_substr()代替substr(),如下所示:


        $name = "Würzburg";
        $name_short = mb_substr($name, 0, 3);