Selectize 正在插入一个 ?数据值属性中的字符

Selectize is inserting a ? character in data-value attribute

我正在使用 selectize.js 构建比利时所有城市的下拉列表。

var cityselect = $('.city-select');
    if (cityselect.length) {
        $('.city-select').selectize({
            create: false,
            sortField: {
                field: 'text',
                direction: 'asc'
            },
            dropdownParent: 'body',
            plugins: ['remove_button']
        });
    }

我创建 selectize 字段如下:

<div class="form-group">
    <label for="city"><?=lang("register_volunteer_select_city_or_commune")?></label>
    <select id="city" class="city-select" name="city" autocomplete="new-password" required data-validation-required-message="<?=lang("register_volunteer_select_city_or_commune_validation")?>">
        <option value="" selected><?=lang("register_volunteer_select_city_or_commune")?></option>
        <?php
        foreach ($citiesbe as $city) {
            if ($this->currentLanguage == 'fr') {
                $cityName = $city->name_fr;
            } else {
                $cityName = $city->name_nl;
            }
            $key = strtolower($cityName) . "," . $city->zip_code;
            echo "<option value=\"$key\"> $cityName ($city->zip_code)</option>";
        }
        ?>
    </select>
    <div class="help-block font-small-3"></div>
</div>

在比利时,有很多城市的法语名称(例如:Léglise)中包含特殊字符(é, è, ç, ...)等。 变量 $citiesbe 来自我的 table "cities_be",Léglise 的条目如下所示:

+--------------+----------+---------+---------+--------+-------+
| cities_be_id | zip_code | name_nl | name_fr |  lat   |  lng  |
+--------------+----------+---------+---------+--------+-------+
|         1786 |     6860 | Léglise | Léglise | 49,784 | 5,538 |
+--------------+----------+---------+---------+--------+-------+

然后在我的 selectize 中,我可以 select Léglise,它看起来很棒,但是当我检查元素时,我会注意到数据值设置为以下值:

<div data-value="l�glise,6860" class="item"> Léglise (6860)</div>

因为它插入特殊字符(本例中的 é)作为 ?它通过 POST 变量将其作为 ?因此它会产生很多错误。

我该如何解决这个问题?

我已将我的数据库字符集和排序规则设置为 utf8mb4,通过 PHP 与数据库的连接也设置为 utf8mb4,并且我的文档包含一个字符集行:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

我完全运行不知道如何解决这个问题。

您尝试过使用 mb_strtolower() 吗?

https://www.php.net/manual/en/function.mb-strtolower.php

$b = mb_strtolower($a);
echo $b;

PHP5 不兼容 UTF-8,不适用于多字节字符,因此您仍然需要求助于 mb 扩展名。