无法使用PHP读取数组中的重音名称

问题描述

我想检查数组中是否已存在名称我有一个包含重音字符的名称问题。 以下是代码用法,并在填写(法语)名称Charlène Rodriês和(德语)名称Jürgen Günter时使用;它输出 不存在

如何捕获包含重音符号的名称

<?PHP
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['bioname'])) {
        $bioname = trim(htmlentities($_POST['bioname']));
        
        $array = array('John Doe','Bill Cleve','Charlène Rodriês','мария преснякова','Jürgen Günter');
        
        if (in_array($bioname_raw,$array)) { // if bioname already exists
            echo '<div">'.$bioname.' ALREADY exists!</div>';

        }
        else {
            echo '<div">'.$bioname.' NOT exists!</div>';
        }   
    }
}
?>
<form action="<?PHP $_SERVER['PHP_SELF']; ?>" method="POST">    
    <input class="form-control" name="bioname" type="text" placeholder="AUTHORNAME">    
    <button type="submit" id="cf-submit" name="submit" class="btn btn-primary w-100">POST</button>                                  
</form>

解决方法

您正在比较苹果和橙子。

当您执行queryset = Events.objects.order_by('-event_date') 时,它将更改字符串并将其编码为:htmlentities('Charlène Rodriês'),显然与您的Charl&egrave;ne Rodri&ecirc;s中的Charlène Rodriês不匹配。

因此,当您从$ _POST变量中获取值时,请删除in_array()

htmlentities()

并且仅在输出数据之前使用该功能:

$bioname = trim($_POST['bioname']);

一般来说,不要对输入的数据进行编码。 使用时仅对数据进行编码,因为不同的用例需要不同的编码类型。