utf8_unicode_ci,

42 views
Skip to first unread message

Hans Marmolin

unread,
Feb 13, 2011, 5:18:00 AM2/13/11
to rails...@googlegroups.com
Hej
Jag har en rails applikation som använder MYSQL och har definierat
tabellerna enligt
create_table :places, :force => true, :force => true, :options =>
'ENGINE=InnoDB DEFAULT CHARSET=utf8' do |table|

och html filen enligt
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=8" />

och databsen i configurationsflen enligt
development:
adapter: mysql
encoding: utf8
database: Disweb_1-development
username: root
password:
host: localhost
pool: 5
timeout: 5000


Mina problem är
1. När jag använder autocomplete och gör
search=request.raw_post.downcase.split('=').second.split('&').first
för att ta ut söksträngen så får jag '%c3%b6' liknande tecken för ÅÄÖ
Detta åtgärdar jag med följande fix

def to_uf8(search)
#- fix to handle utf8 problem when inputting search chrs
search.gsub!('%c3%b6','ö')
search.gsub!('%c3%a4','ä')
search.gsub!('%c3%a5','å')
search.gsub!('%c3%96','Ö')
search.gsub!('%c3%84','Ä')
search.gsub!('%c3%85','Å')
return search
end

Vilket inte verkar vara rätt väg att gå !!!

2. När jag söker efter matchningar enligt
['LOWER(name) LIKE ?', '%' + search.downcase + '%' ]
ger search med AÅÄ samma resultat, dvs Å i autocompletefältet matchar
alla namn som har ÅÄA

3. Nu vet jag inte om det finns samma problem alla gånger jag använder
find med ÅÄÖ i villkorssatsen ?
I så fall är jag illa ute !

Jag har läst att man ev kan åtgärda detta med att
collation=utf8_unicode_c
men var och hur definierar man detta ?

Finns det andra lösningar till mina problem ?

Tacksam för all hjälp !

____________________________________________
Hans Marmolin
St: Larsgatan 50, 58224 Linköping, Sweden
Phone: +46708371202

Henrik Nyh

unread,
Feb 13, 2011, 5:56:59 AM2/13/11
to rails...@googlegroups.com
2011/2/13 Hans Marmolin <hans.m...@klockholm.se>:

> Mina problem är
> 1. När jag använder autocomplete och gör
> search=request.raw_post.downcase.split('=').second.split('&').first
> för att ta ut söksträngen så får jag '%c3%b6' liknande tecken för ÅÄÖ
> Detta åtgärdar jag med följande fix
>
>    def to_uf8(search)
>      #- fix to handle utf8 problem when inputting search chrs
>       search.gsub!('%c3%b6','ö')
> Vilket inte verkar vara rätt väg att gå !!!

Nej, definitivt inte. raw_post är väl URL-encodad, d.v.s. alla
"konstiga" tecken skrivs med procenttecken och siffror.

Kan du inte använda params['search'] eller liknande för det här? Det
värde du vill åt finns förmodligen redan omgjort till UTF-8
någonstans. raw_post verkar onödigt lågnivå.

> 2. När jag söker efter matchningar enligt
> ['LOWER(name) LIKE ?', '%' + search.downcase + '%' ]
> ger search med AÅÄ samma resultat, dvs Å i autocompletefältet matchar alla

Jag brukar göra typ

['name COLLATE utf8_swedish_ci LIKE ?', '%' + search + '%' ]

Då blir sökningen case-insensitive (även med åäö/ÅÄÖ) och skiljer på
t.ex. "a" och "å" men inte på t.ex. "a" och "á".

> 3. Nu vet jag inte om det finns samma problem alla gånger jag använder find
> med ÅÄÖ i villkorssatsen ?
> I så fall är jag illa ute !

Skriv tester för detta så märker du.

Hans Marmolin

unread,
Feb 13, 2011, 12:59:55 PM2/13/11
to rails...@googlegroups.com
Henrik
Tack för hjälpen - skall följa dina råd. Då tror jag att problemen
löser sig

Jag har ett annat problem som jag länge sökt svar på men inte kunnat
hitta något.
Det gäller inte ÖÄÅ men best practise så det platsar väl egentligen
inte i denna lista, men ändock - det kan ju vara av visst allmänt
intresse

Jag har ofta flera olika views som anropar samma action i en
controller med olika indata och ibland skall oxå olika views renderas
tex en show action som gäller en plats kan anropas från en plats-lista
eller från ett plats-autocomplet fält, etc i platscontroller viewn men
även från en länk i en annan view, eller från ett redirect i en annan
action. De olika anropen har olika indata och kräver delvis olika
logik och implementation

Resultatet är tjocka controller actions med många villkorssatser -
inte vidare snyggt!

Men hur löser rman problemet ?
- villkorsatser i en action men det bryter mot regeln "tunna
controllers"
- flera controllers - men det bryter mot DRY då mycket av koden är
gemensam och man lätt hämnar i tex 5 olika plats-controllers
- flera special-actions men det bryter mot RESTs principer
- designa om så att problemet inte uppstår, men det bryter mot en
Användarorienterad design som jag tillämpar där man utgår ifrån
användarnas uppgifter och situation

Så min fråga är!
Vad är best practise när det gäller detta problem?

Tacksam för all hjälp


____________________________________________
Hans Marmolin
St: Larsgatan 50, 58224 Linköping, Sweden
Phone: +46708371202

> --
> You received this message because you are subscribed to the Google
> Groups "rails-i18n" group.
> To post to this group, send email to rails...@googlegroups.com.
> To unsubscribe from this group, send email to rails-i18n+...@googlegroups.com
> .
> For more options, visit this group at http://groups.google.com/group/rails-i18n?hl=en
> .
>
>

"Martin J. Dürst"

unread,
Feb 13, 2011, 8:14:28 PM2/13/11
to rails...@googlegroups.com, Hans Marmolin
Hello Hans,

Can you please post question and answer (or a summary thereof) in
English, so that the rest of the subscribers can follow the discussion?

[From looking at the code, a function such as *to_utf8* below is
extremely restricted, and there is a high chance that you soon get hit
with a character that's not in your list.]

Regards, Martin.

On 2011/02/13 19:18, Hans Marmolin wrote:
> Hej

> Jag har en rails applikation som anv�nder MYSQL och har definierat


> tabellerna enligt
> create_table :places, :force => true, :force => true, :options =>
> 'ENGINE=InnoDB DEFAULT CHARSET=utf8' do |table|
>
> och html filen enligt
> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
> <head>
> <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
> <meta http-equiv="X-UA-Compatible" content="IE=8" />
>
> och databsen i configurationsflen enligt
> development:
> adapter: mysql
> encoding: utf8
> database: Disweb_1-development
> username: root
> password:
> host: localhost
> pool: 5
> timeout: 5000
>
>

> Mina problem �r
> 1. N�r jag anv�nder autocomplete och g�r


> search=request.raw_post.downcase.split('=').second.split('&').first

> f�r att ta ut s�kstr�ngen s� f�r jag '%c3%b6' liknande tecken f�r ���
> Detta �tg�rdar jag med f�ljande fix


>
> def to_uf8(search)
> #- fix to handle utf8 problem when inputting search chrs

> search.gsub!('%c3%b6','�')
> search.gsub!('%c3%a4','�')
> search.gsub!('%c3%a5','�')
> search.gsub!('%c3%96','�')
> search.gsub!('%c3%84','�')
> search.gsub!('%c3%85','�')
> return search
> end
>
> Vilket inte verkar vara r�tt v�g att g� !!!
>
> 2. N�r jag s�ker efter matchningar enligt


> ['LOWER(name) LIKE ?', '%' + search.downcase + '%' ]

> ger search med A�� samma resultat, dvs � i autocompletef�ltet matchar
> alla namn som har ��A
>
> 3. Nu vet jag inte om det finns samma problem alla g�nger jag anv�nder
> find med ��� i villkorssatsen ?
> I s� fall �r jag illa ute !
>
> Jag har l�st att man ev kan �tg�rda detta med att collation=utf8_unicode_c


> men var och hur definierar man detta ?
>

> Finns det andra l�sningar till mina problem ?
>
> Tacksam f�r all hj�lp !
>
> ____________________________________________
> Hans Marmolin
> St: Larsgatan 50, 58224 Link�ping, Sweden
> Phone: +46708371202
>
>
>
>
>
>
>
>
>

--
#-# Martin J. D�rst, Professor, Aoyama Gakuin University
#-# http://www.sw.it.aoyama.ac.jp mailto:due...@it.aoyama.ac.jp

Hans Marmolin

unread,
Feb 14, 2011, 1:04:46 AM2/14/11
to rails...@googlegroups.com
Sorry Martin
But I posted it in the wrong group and it has been moved to rails-se
For your information

One problem was that I use request.raw_post to get the search string
and that does no handle ÖÅÄ öäå
My mistake. Did not really understad how autocomplete worked when I
forst wrote that code
The proposed solution was to use params['search'] instad that should
take care of that

The second problem was about how to search only för ÖÄÅ in an
autocomplete field
and the proposed solution was to use
['name COLLATE utf8_swedish_ci LIKE ?', '%' + search + '%' ]
as search condition

____________________________________________
Hans Marmolin
St: Larsgatan 50, 58224 Linköping, Sweden
Phone: +46708371202

14 feb 2011 kl. 02.14 skrev Martin J. Dürst:

> Hello Hans,
>
> Can you please post question and answer (or a summary thereof) in
> English, so that the rest of the subscribers can follow the
> discussion?
>
> [From looking at the code, a function such as *to_utf8* below is
> extremely restricted, and there is a high chance that you soon get
> hit with a character that's not in your list.]
>
> Regards, Martin.
>
> On 2011/02/13 19:18, Hans Marmolin wrote:
>> Hej

>> Jag har en rails applikation som använder MYSQL och har definierat


>> tabellerna enligt
>> create_table :places, :force => true, :force => true, :options =>
>> 'ENGINE=InnoDB DEFAULT CHARSET=utf8' do |table|
>>
>> och html filen enligt
>> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
>> <head>
>> <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
>> <meta http-equiv="X-UA-Compatible" content="IE=8" />
>>
>> och databsen i configurationsflen enligt
>> development:
>> adapter: mysql
>> encoding: utf8
>> database: Disweb_1-development
>> username: root
>> password:
>> host: localhost
>> pool: 5
>> timeout: 5000
>>
>>

>> Mina problem är
>> 1. När jag använder autocomplete och gör

>> search=request.raw_post.downcase.split('=').second.split('&').first

>> för att ta ut söksträngen så får jag '%c3%b6' liknande tecken för ÅÄÖ

>> Detta åtgärdar jag med följande fix


>>
>> def to_uf8(search)
>> #- fix to handle utf8 problem when inputting search chrs

>> search.gsub!('%c3%b6','ö')
>> search.gsub!('%c3%a4','ä')
>> search.gsub!('%c3%a5','å')
>> search.gsub!('%c3%96','Ö')
>> search.gsub!('%c3%84','Ä')

>> search.gsub!('%c3%85','Å')
>> return search
>> end
>>


>> Vilket inte verkar vara rätt väg att gå !!!
>>

>> 2. När jag söker efter matchningar enligt


>> ['LOWER(name) LIKE ?', '%' + search.downcase + '%' ]

>> ger search med AÅÄ samma resultat, dvs Å i autocompletefältet matchar


>> alla namn som har ÅÄA
>>
>> 3. Nu vet jag inte om det finns samma problem alla gånger jag
>> använder
>> find med ÅÄÖ i villkorssatsen ?
>> I så fall är jag illa ute !
>>

>> Jag har läst att man ev kan åtgärda detta med att

>> collation=utf8_unicode_c
>> men var och hur definierar man detta ?
>>

>> Finns det andra lösningar till mina problem ?
>>
>> Tacksam för all hjälp !
>>
>> ____________________________________________
>> Hans Marmolin
>> St: Larsgatan 50, 58224 Linköping, Sweden
>> Phone: +46708371202
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
> --
> #-# Martin J. Dürst, Professor, Aoyama Gakuin University

Greek Store

unread,
Oct 14, 2014, 12:07:47 PM10/14/14
to rails...@googlegroups.com
[Alpha Omicron Pi Unique Silver] Which is above? which is below? See
more info at http://greek21.com/images/AOP-P004.jpg
greek21.com
[Alpha Phi Bear Silver Ring] Bear on the ring? Amazing!
http://greek21.com/images/AP-R004.jpg

--
Posted via http://www.ruby-forum.com/.
Reply all
Reply to author
Forward
0 new messages