Php Can';t使用substr指定希伯来文字母的数量
在书面希伯来语中,元音有标记,称为niqqd,而不是完整的字母。英语中的“aeiou”是字母;在希伯来语中,它们是字母下面的标记。例如,在נִקּּּד中,第一个字母(נִ)下面有一个表示“i”的点(希伯来语从右向左读)。每个标记都是一个字符,但不是一个字母 我正在尝试获取任何希伯来语单词的最后两个字母(不是字符)。问题是函数:Php Can';t使用substr指定希伯来文字母的数量,php,hebrew,Php,Hebrew,在书面希伯来语中,元音有标记,称为niqqd,而不是完整的字母。英语中的“aeiou”是字母;在希伯来语中,它们是字母下面的标记。例如,在נִקּּּד中,第一个字母(נִ)下面有一个表示“i”的点(希伯来语从右向左读)。每个标记都是一个字符,但不是一个字母 我正在尝试获取任何希伯来语单词的最后两个字母(不是字符)。问题是函数:substr()和mb_substr()包含元音标记作为完整字符,因此它没有给出最后两个字母。我能做什么 这是我的密码: <?php $array = ar
substr()
和mb_substr()
包含元音标记作为完整字符,因此它没有给出最后两个字母。我能做什么
这是我的密码:
<?php
$array = array('סָאוּנְדּמֶן','לֵיְמֶן','דֹּמֶן','דּוֹרְמֶן','אחמד','בןהמלך');
$dynamicstring = 'שֶׁמֶן';
$word_strlen = strlen($dynamicstring);
$newstring = substr($dynamicstring, -4);
echo strlen($dynamicstring);
echo '<br>';
echo htmlspecialchars($newstring);
?>
使用mb_substr($string,0,3,'UTF-8');方法,而不是UTF-8,指定您应该使用的希伯来语的正确格式。确保您还检查了以下各项:
- HTML文档集为同一字符集
- 将数据集插入同一字符集的数据库连接
- 数据库表设置为同一字符集
- 将数据集提取到同一字符集的数据库连接
<?php
$array = array('סָאוּנְדּמֶן','לֵיְמֶן','דֹּמֶן','דּוֹרְמֶן','אחמד','בןהמלך');
$dynamicstring = 'שֶׁמֶן';
$word_strlen = mb_strlen($dynamicstring, 'UTF-8');
$newstring = mb_substr($dynamicstring, ($word_strlen-2), $word_strlen, 'UTF-8');
echo mb_strlen($dynamicstring);
echo '<br>';
echo htmlspecialchars($newstring);
?>
无论是substr()
还是mb_substr()
都不知道字符标记或字母substr()
只查看字节数,mb\u substr()
查看代码点数。由于字符标记和字母都使用单个代码点,因此mb_substr()
无法区分它们
您可以改为使用正则表达式:
if (preg_match('/\X\X$/u', $dynamicstring, $match)) {
$newstring = $match[0];
}
或
在您的程序中使用这两个字母中的任何一个,输出שֶׁןֶן的最后两个字母:
מֶן
每个\X
将匹配一个字母加上紧跟其后的所有标记。表达式末尾的/u
选项是打开Unicode模式(UTF-8),否则它将无法识别希伯来语代码点
如果要使用单行preg_replace()
版本,必须在正则表达式模式的开头添加^.*?
,以匹配从输入字符串开始到下一个模式的所有字符。将*?
替换为*
的*?
是为了使其不贪婪,否则它也将参与下一个序列。只有当输入中有换行符时才需要/s
选项,以允许
匹配所有字符,包括换行符,否则可以忽略该选项
我建议查看Regular-Expressions.info,尤其是和。请将您的尝试代码添加为weel@DarkBee添加了感谢@NigelRen的可能副本不,不是,我这里的问题是关于希伯来文的评分。不same@din除了使用mb_substr
,您当然也需要使用。我已经尝试过了,但它不起作用(另外,我需要最后2个字符,所以它必须是:$string,-4,0,'UTF-8',正如我在另一条评论中所说,我已经使用了这个。我没有使用SQL,所以这不是问题。我正在尝试用mb_substr做你说的事情,但它不起作用。我需要最后2个字符。)
$newstring = preg_replace('/^.*?(\X\X)$/us', '$1', $dynamicstring);