7

这是我的工作代码:

<!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在结果中显示效果很好。

4

2 回答 2

6

您需要使用多字节字符串函数

您也可以mbstring.func_overload = 7在您的php.ini, 和 php 中设置标准字符串函数自动使用多字节对应项。

如果您想为重载函数使用其他值以更好地满足您的需求,请查看mbstring 重载文档

另外,更换

$characters = str_split($char_string);

$characters = preg_split('//u', $char_string, -1, PREG_SPLIT_NO_EMPTY);

因为str_split不是多字节安全的,而且别无选择

另外,如果您提交表单后没有在标题中发送编码,或者它们存在一些问题,您可以在您的 php.ini 中设置

default_charset = "UTF-8"

于 2013-03-30T13:30:07.360 回答
2

我用编码 UTF-8 测试了你的代码,它的工作..

我添加了一个元标记:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
于 2013-03-30T14:03:15.053 回答