PHP trim 非字母 Unicode
PHP trim non-letters Unicode
我需要 trim 所有字符的字符串 除了 来自 UTF-8 任何语言的字母。对于早期测试,这工作正常,直到我开始使用 UTF-8 非拉丁字母:
<?php
$s = '$5ı龢abc';
echo '<p>'.$s.'</p>';
while (!preg_match('/([\p{L}]+)/u', $s[0]))
{
$s = substr($s, 1);
echo '<p>'.$s.'</p>';
}
?>
当前输出如下:
ı龢abc
ı龢abc
5ı龢abc
ı龢abc
�龢abc
龢abc
��abc
�abc
abc
我希望最终输出为:ı龢abc
。但是我不太确定我错过了什么?
使用单个字符索引不起作用,因为 PHP 不知道字符串中的“字符”,而只是索引字节。这显然是多字节字符的问题。但是无论如何您都太手动了;只需替换 all non-letter characters at the beginning of the string:
$s = preg_replace('/^\P{L}*/u', '', $s);
我需要 trim 所有字符的字符串 除了 来自 UTF-8 任何语言的字母。对于早期测试,这工作正常,直到我开始使用 UTF-8 非拉丁字母:
<?php
$s = '$5ı龢abc';
echo '<p>'.$s.'</p>';
while (!preg_match('/([\p{L}]+)/u', $s[0]))
{
$s = substr($s, 1);
echo '<p>'.$s.'</p>';
}
?>
当前输出如下:
ı龢abc
ı龢abc
5ı龢abc
ı龢abc
�龢abc
龢abc
��abc
�abc
abc
我希望最终输出为:ı龢abc
。但是我不太确定我错过了什么?
使用单个字符索引不起作用,因为 PHP 不知道字符串中的“字符”,而只是索引字节。这显然是多字节字符的问题。但是无论如何您都太手动了;只需替换 all non-letter characters at the beginning of the string:
$s = preg_replace('/^\P{L}*/u', '', $s);