这是我的工作代码:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>
</head>
<body>
<?php
$arabic = "صحيفة اسبوعية مستقلة شاملة تتابع الاخبار فى المنطقة العربية";
$french = "que voulez vous dire?";
if (isset($_POST['search'])) {
$search = $_POST['search'];
$key = $_POST['key'];
$td = substr_count($arabic, $key);
echo $td;
}
echo "<br />" . $arabic;
function count_occurences($char_string, $haystack, $case_sensitive = true) {
if ($case_sensitive === false) {
$char_string = strtolower($char_string);
$haystack = strtolower($haystack);
}
$characters = preg_split('//u', $char_string, -1, PREG_SPLIT_NO_EMPTY);
//$characters = str_split($char_string);
$character_count = 0;
foreach ($characters as $character) {
$character_count = $character_count + substr_count($haystack, $character);
}
return $character_count;
}
?>
<form name="input" action="" method="post">
<input type= "text" name="key" value=""/>
<input type ="submit" name="search" value =" find it !"/>
</form>
</body>
</html>
对于$french
,它的效果很好,但是$arabic
却没有。
当然没有错误,但是如果我输入例如ح
来搜索该字母,则对于我输入的每个字母,它始终显示0
。
有什么不对吗?或者我错过了阿拉伯语的东西?我不知道为什么在$french
中如果我输入v
它会在2
中显示{{1}}。
答案 0 :(得分:6)
您需要使用Multibyte String Functions。
您还可以在mbstring.func_overload = 7
中设置php.ini
,php会自动使用多字节对应的标准字符串函数。
查看mbstring overloading文档是否要为重载函数使用其他值以更好地满足您的需求
另外,替换
$characters = str_split($char_string);
与
$characters = preg_split('//u', $char_string, -1, PREG_SPLIT_NO_EMPTY);
因为str_split
不是多字节安全的,没有其他选择
另外,如果您在提交表单后没有在标题中发送编码,或者它们存在一些问题,您可以在php.ini中设置
default_charset = "UTF-8"
答案 1 :(得分:2)
我使用编码UTF-8测试了你的代码,它的工作正在进行..
我添加了一个元标记:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">