【问题标题】:Language Special Characters in database search数据库搜索中的语言特殊字符
【发布时间】:2012-06-15 10:35:51
【问题描述】:

我在一个多语言网站上进行搜索(目前只有英语和土耳其语)。

只要访问者使用正确的语言字符,搜索出来的就会是正确的结果。

例如

  • 对于单词“Moudle”(英文),类似 sql 查询的子句类似于“%Moudle%”,并且工作正常。
  • 对于单词“modül”(土耳其语),类似 sql 的子句类似于“%modül%”,并且工作正常。

我的问题是,对于土耳其语,如果我使用“modul”而不是“modül”,它就不起作用。只是因为“ü”。

有没有什么方法可以从数据库中获取结果,即使我使用英语中相同的对应字符而不是原始字符?


表的结构是

CREATE TABLE IF NOT EXISTS post_lang (
  id bigint(20) NOT NULL AUTO_INCREMENT,
  post_id bigint(20) NOT NULL,
  ln enum('en','tr') NOT NULL,
  title text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (id)
);
INSERT INTO post_lang (id, post_id, ln, title, content, doc) VALUES
(1, 1, 'en', 'How can I create a new module?'),
(2, 1, 'tr', 'Nasıl yeni bir modül yaratırım?');

【问题讨论】:

    标签: php zend-framework utf-8 multilingual


    【解决方案1】:

    您可以创建一个字段,例如 normalizedText,您将只存储不带重音符号的字符,遵循您的逻辑。

    因此,您可以使用不包含重音符号且结果一致的字符串在您的 normalizedText 上运行搜索。

    您可以使用方便的 php wordpress 函数 (remove_accents) 将重音字符转换为非重音字符

    【讨论】:

    • 它可以从给定的上表转换吗?因为我在那个表中有很多记录,我不能手动完成。
    • 你必须首先制作一个脚本,用非重音字符更新你的 normalizedText,然后你可以对其运行任何查询
    • 好的,感谢您的回复,尝试此解决方案后会更新您。
    • 我想出了这个解决方案,但不确定如何删除重音符号。
    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多