从变量中拆分第一个字母

时间:2012-12-13 11:18:01

标签: php character-encoding hebrew

我需要从变量$ name中分割第一个字母。 我该怎么做?

$name = $userData['name'];

我怎么能得到第一个字母?

请检查是否正确:

if($userData['gender'] == 'male'){
    if($firstletter=='i'){
    $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][1]);
    }else{
          $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][2]);}
}else{
    if($firstletter=='i'){
    $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][1]);
    }else{
          $picture = ImageCreateFromPNG ($global['maleBackgroundImages'][2]);}
}

4 个答案:

答案 0 :(得分:8)

$userData['name'][0]

字符串中的偏移量可以像数组一样访问。请注意,这假设您的字符串采用单字节编码。如果您有多字节编码字符串,则需要:

mb_substr($userData['name'], 0, 1, 'UTF-8' /* (the correct encoding) */)

答案 1 :(得分:3)

  

duplicate question移出。代码略有不同,但涵盖相同。

首先,您不仅需要知道字符串是哪种语言(希伯来语),还要知道使用了哪种字符编码。

假设输入位于名为$letters的变量内,编码为UTF-8。您要比较的字母是א('HEBREW LETTER ALEF'(U + 05D0))。

要发布的第一个悬崖是在PHP脚本中安全地使用UTF-8表示,这可能是UTF-8编码以外的其他表示:

$compareLetter = "\xD7\x90"; // UTF-8 'HEBREW LETTER ALEF' (U+05D0)

下一个悬崖是从输入中提取第一个字母。正如我们所知,$compareLetter的定义是字节大小为2。所以我们需要比较前两个字节:

$isSame = substr($letters, 0, 2) === $compareLetter;

您的其余代码可以保持不变(但也可以像我现在那样简化):

$png     = $global['maleBackgroundImages'][4 + $isSame];
$picture = ImageCreateFromPNG($png);

完整的代码示例:

...

$compareLetter = "\xD7\x90"; // UTF-8 'HEBREW LETTER ALEF' (U+05D0)

$isSame  = substr($letters, 0, 2) === $compareLetter;
$png     = $global['maleBackgroundImages'][4 + $isSame];
$picture = ImageCreateFromPNG($png);

字符编码注释:

  • 知道使用了哪种字符编码:Everwhere,包括像
    • 输入字符串
    • PHP脚本文件
    • 输出
  • 处理与其编码有关的字符串数据。

一些补充说明:

  • 使用前初始化变量。
  • 如果您有一个简单的决定,您通常可以将其表达为计算。布尔true等于整数1false等于0
  • 减少if的数量通常会减少代码。这可以帮助您减少错误。

答案 2 :(得分:2)

您可以使用数组语法获取字符串的第一个字母!

$firstletter = $userData['name'][0];

答案 3 :(得分:0)

这只是一个补充答案。

如果您希望使用utf-8字符串进行整齐的单字符访问,则可以执行以下操作:

$chars = preg_split( '/(?<!^)(?!$)/u', $userData['name'] );

echo $chars[0];