Come scrivere uno script php di ricerca in cui sono sottolineate le parole con segni diacritici termini partita di ricerca senza segni diacritici, ed i risultati?

StackOverflow https://stackoverflow.com/questions/2356603

Domanda

Ho questo sito dove ci sono un sacco di testi con segni diacritici in loro (glifi ausiliari aggiunti alle lettere, secondo wikipedia) e cercare maggior parte delle persone che utilizzano questi testi parole senza le glifi. Ora non dovrebbe essere difficile da farlo avendo una copia dei testi senza segni diacritici. Tuttavia, voglio sottolineare le partite nel testo originale. Qual è il modo migliore per farlo?

È stato utile?

Soluzione

Si dovrebbe provare a cambiare l'impostazione di confronto nel DB MySQL.

Ci sono tre che sembrano venire spesso in discussioni di questo argomento:

  1. utf8_general_ci

  2. utf8_unicode_ci

  3. utf8_bin ← Probabilmente si desidera questo.

Ho scoperto che # 3 corrisponderà accenti in ricerca. Questa risposta dà un po 'di background sulle differenze, ma non menziona il fatto che utf8_bin è sensibile anche accenti. Si potrebbe desiderare di provare tutti e tre in modo da poter verificare di persona se si sta lavorando con la lingua / script hai a che fare con.

Per essere veramente sicuri che le cose stanno andando per abbinare correttamente, si dovrà guardare in Unicode normalizzazione pure, che è in realtà un insieme di palla diversa di cera. E 'possibile che l'utente potrebbe digitare una query con un accento in una normalizzazione diverso da quello i dati sono memorizzati in, e quindi potrebbe non riuscire a partita. Ho avuto quel problema con SQLite, non è sicuro se si applica a MySQL o meno.

FWIW, ecco una CREATE TABLE Attualmente sto usando, dove avevo bisogno di corrispondere gli accenti, che sta impostando il COLLATION:

CREATE TABLE `glosses` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `morphemes` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `labels` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `phrase_id` int(11) DEFAULT NULL,
  `nth_word` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Si può vedere il COLLATE=utf8_bin appiccicato alla fine.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top