为什么 preg_replace 删除变音符号?

Why is preg_replace removing umlauts?

我正在尝试为我的搜索表单创建一个 preg_replace,但它也一直在替换变音符号...

Code:
    $zoekwoord = $this->input->get('q', TRUE);
    $zoekwoord = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]u/s', '', $zoekwoord);

Any idea how to keep special chars? (like ö)

您定义了删除除 ASCII 字母、数字、_ 和一些特殊字符以外的任何字符的模式。

您需要将 [A-Za-z0-9_] 替换为 \w 并使用 /u 修饰符使其识别 Unicode。

使用

'/[^\w %[\].()%&-]+/u'

注意在这个字符class里面只需要转义]/s 修饰符是多余的,我相信你在模式末尾添加了 u 打错了字。