我有以下utf8编码的来源:
为什么是以下代码:
preg_match("@^[0-9A-ZĄąĆćĘꣳÓ󯿏źŃńŚś\-\.\, ]{3,35}$@i", $valuesId)
允许像płatność,nieudana proba这样的单词和表达但不允许简单表达nieudanapróba?对于preg_match不想传递的Ó,ó字符似乎存在问题。我可以继续说ćoba或rćoba这样的词,但próba不起作用。
如果与ł,ś和ć一起被允许,为什么会这样呢?
答案 0 :(得分:0)
TL; DR MySQL utf8
编码命名错误。
我测试了你的代码,它与你给出的所有表达式相匹配。 Demo。我强烈怀疑你有MySQL的编码问题。
最好的选择:您确实需要强制MySQL使用utf8mb4
编码,而不是utf8
编码。有关此问题的完整解释和教程可供in this post by Mathias Bynens使用。要点:
CHARACTER SET
到utf8mb4
和COLLATE
到utf8mb4_unicode_ci
来修改数据库,表格和文本列文本栏。utf8mb4
每个字符使用额外的字节,因此您可能需要更改列和索引键的最大长度。utf8
更改为utf8mb4