Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konwersja literek z bazy na małe
Forum PHP.pl > Forum > PHP
Speedy
Hej.

Mam taki problem. Pobieram dane z bazy mysql, która jest zakodowana w utf8. Cała strona www i wszystko na niej jest zakodowane w utf8. Dane pobieram za pomocą ajaxa do drzewka (jquery - komponent jstree). W tym drzewku wyświetlam nazwy z polskimi znakami. Wszystkie nazwy składają się wyłącznie w wielkich liter i wyświetlają się poprawnie, ale w momencie, gdy chcę zamienić duże litery na małe, to wyświetlają się krzaki. Chcę, żeby pierwsza litera wyrazu była wielka, a reszta liter mała oraz żeby nie było krzaków. Nie mam już siły się z tym teraz męczyć, bo przed chwilą udało mi się okiełznać inny problem, z którym mordowałem się pół dnia tongue.gif.

Pozdrawiam i proszę o pomoc smile.gif.
erix
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

W komentarzach jest coś takiego:
Cytat
An example of how to make the first letter in a string uppercase - analogous to UCFIRST

SELECT CONCAT(UPPER(SUBSTRING(firstName, 1, 1)), LOWER(SUBSTRING(firstName FROM 2))) AS properFirstName
Speedy
Dzięki. Działa to jako normalne zapytanie, choć nie wiem, dlaczego w active record nie chce mi zaskoczyć. A znacie może jakiś mysql-owy odpowiednik php-owej funkcji ucwords" title="Zobacz w manualu PHP" target="_manual? Taka funkcja w szczególności by mi się przydała.
kefirek
INITCAP

  1. SELECT INITCAP(pole) AS jak
Speedy
Nie przeczytałeś do końca mojej wypowiedzi. Nie chciałem zamieniać wszystkich literek na małe, tylko wszystkie oprócz pierwszej tak, jak to robi php-owa funkcja ucfirst" title="Zobacz w manualu PHP" target="_manual i erix podał mi rozwiązanie.

Teraz chcę pozamieniać rekordy tak, żeby pierwsze litery wszystkich wyrazów były duże, a reszta mała tak, jak to robi php-owa funkcja ucwords" title="Zobacz w manualu PHP" target="_manual.

Widzę, że zedytowałeś swojego posta, bo wcześniej miałeś tam lower zamiast initcap winksmiley.jpg.
W każdym razie funkcji initcap chyba nie ma w mysql?

//edit

Sprawdziłem. Na pewno jej nie ma w mysql 5. Wypluło mi: "There was an SQL error: FUNCTION initcap does not exist"
kefirek
A co robi INITCAP
Initcap zwraca string, w którym słowo ma dużą pierwszą literę a reszta małe
JoShiMa
Cytat(Speedy @ 14.12.2008, 17:32:39 ) *
Teraz chcę pozamieniać rekordy tak, żeby pierwsze litery wszystkich wyrazów były duże, a reszta mała tak, jak to robi php-owa funkcja ucwords" title="Zobacz w manualu PHP" target="_manual


To masz gotowca. Funckja zamienia pierwszą literę na wielką z uwzględnieniem polskich znaków
Speedy
Ale tam są przykłady konwersji na inne kodowanie... Ja nie wiem, skąd w mojej aplikacji mogłoby się wziąć inne kodowanie skoro wszędzie mam utf8. Wszystkie krzaki wyglądają tak: � . Jakby to było iso-8859-2, to bym poznał, bo krzaki byłyby specyficzne. Chciałbym dokonać zmiany liter po stronie bazy danych, a nie po stronie php.
erix
A dajesz zaraz po podłączeniu:
  1. SET names utf8;
?
Speedy
To nic nie zmienia. Wielkie literki, które są standardowo wyświetlają się poprawne dopóki nie zacznę ich zmieniać php-owymi funkcjami, dlatego chciałbym to zrobić za pomocą mysql-a. Initcap byłoby dobrym rozwiązaniem, ale niestety nie ma takiej funkcji w mysql.
erix
Cytat
Wielkie literki, które są standardowo wyświetlają się poprawne dopóki nie zacznę ich zmieniać php-owymi funkcjami

Bo pewnie używasz ucfirst" title="Zobacz w manualu PHP" target="_manual zamiast mb_convert_case" title="Zobacz w manualu PHP" target="_manual. winksmiley.jpg
Speedy
No nareszcie działa biggrin.gif. Dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.