![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Do zmiany wielkości znaków używam funkcji strtoupper() i strtolower(). Problem w tym, że przekazane małe "ó" do funkcji strtoupper() nie zmienia się na duże "Ó", np. mając ciąg "ćwok" funkcja zmienia go na: "ćWOK", nie zmienia literki "ć". Z drugą funkcją jest analogicznie. Dziwne jest to że funkcja zmieniająca pierwszy znak na duży, czyli "ucfitst()" zmienia "ć" na "Ć".
Mógłby ktoś mi pomóc? Pozdrawiam. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 25.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Wydaje sie, ze u mnie dziala. ![]() Hint: ustaw locale. :idea: Ponizej przykład: Kod <?php
setlocale ("LC_ALL","pl_PL"); $tekst = "cierpiący żółw wydziela wstrętną woń"; print ("<html><head><meta http-equiv="Content-Type" content="text/html; chars et=iso-8859-2"></head><body>"); print ($tekst."n<br>n"); print (strtoupper($tekst)."n<br>n"); print ("</body></html>"); php?> System: PLD Linux 1.0 Ra, php-4.2.3-9. 8) Pozdrawiam, -------------------- Wasz Socrat
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, z tym sobie już poradziłem, przez zmianę w nagłówku:
Kod <META http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
na Kod <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
Tylko, że po tej zmianie mam inny problem. Mianowicie mam taki skrypt: Kod <?
session_start(); session_cache_limiter('nocache'); require_once ("funkcje.php"); naglowek_html("Wyjście"); if (session_is_registered("user")) { session_unregister("user"); session_destroy("user"); echo "<H3 ALIGN=center>Zostałeś wylogowany</h3>"; } else { echo "<H3 ALIGN=center>Nie byłeś zalogowany</h3>"; } ?> i funkcje naglowek_html() w pliku funkcje, wygląda ona tak: Kod function naglowek_html($tytul)
{ ?> <html> <head> <title><?=$tytul?></title> <meta http-equiv="Content-Language" content="pl"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <LINK REL="stylesheet" HREF="style.css" TYPE="text/css"> </head> <body> <? } Teraz po wyświetleniu powyższej strony pokazuje mi się coś takiego Nie byłe# zalogowany, czyli nie wyświetla "ś". Gdy miałem charset=iso-8859-2 nie było takiego problemu. Najciekawsze jest to, że dzieje się tak tylko przy bezpośrednim wywołaniu tekstu np. Kod echo "<H3 ALIGN=center>Zostałeś wylogowany</h3>"; Jeśli ten sam tekst wsadzimy do jakiejś funkcji:
Kod function wys()
{ echo "<H3 ALIGN=center>Nie byłeś zalogowany</h3>"; } i ją upchamy w powyższym skrypcie, to tekst wyświetli się poprawnie. Powrócił bym do poprzedniego sposobu kodowania tekstu, ale powróci poprzedni problem. A jeszcze jedno. Wstawiając do skryptu ^Socrat^ coś takiego Kod print "śćżą";
również nie wyświetlą się wszystkie znaki poprawnie. Znany jest komuś podobny przypadek? Jak tak to proszę o pomoc. Dzięki za ewentualne odpowiedzi. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 8.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Już uporałem się z problemem. Jak by ktoś miał podobny to polecam kodowanie iso-8859-2 i skorzystać z poniższych funkcji konwersji WIN 1250 na ISO 8859-2 i odwrotnie.
Kod //ISO-WIN
function iso_win($tekst) { $tekst = strtr($tekst, "xA1xA6xACxB1xB6xBC", "xA5x8Cx8FxB9x9Cx9F"); return $tekst; } //WIN-ISO function win_iso($tekst) { $tekst = strtr($tekst, "xA5x8Cx8FxB9x9Cx9F", "xA1xA6xACxB1xB6xBC"); return $tekst; } Później tylko, tak jak w moim przykładzie Kod $ciag = iso_win($ciag);
$ciag = strtoupper($ciag); $ciag = win_iso($ciag); I wszystko gra ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 21.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
a ja mam tak że mam tylko małe litery, niezależnie czy pisze dużymi czy małymi wyświetlaja mi się tylko małe !
zmieniłem kodowanie z windows1250 ma iso 8859-2 myślicie że to jest przyczyną |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
a ja załatwiłem to w następujący sposób:
Funkcja zmieniająca małe litery na DUŻE a następnie przetwarzam zmienną strtoupper, w wyniku czego ciąg zawiera tylko DUŻE litery wraz z ogonkami. Kod <? phpfunction High_to_Low($text){ $text=str_replace('ę', 'Ę', $text ); $text=str_replace('ó', 'Ó', $text ); $text=str_replace('ą', 'Ą', $text ); $text=str_replace('ś', 'Ś', $text ); $text=str_replace('ł', 'Ł', $text ); $text=str_replace('ż', 'Ż', $text ); $text=str_replace('ź', 'Ź', $text ); $text=str_replace('ń', 'Ń', $text ); $text=str_replace('ć', 'Ć', $text ); return $text;} ?> <?php $nazwisko = High_to_Low($_POST["nazwisko"]); $nazwisko = strtoupper($nazwisko); ?> Oczywiście można zrobic drugą funkcję High_to_Low odwracając wielkość liter i wywołanie strtolower i będziemy w wyniku mieć małe literki. Ten post edytował Gularz_pl 25.01.2009, 22:09:09 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
A ja włączam ignorowanie wielkości znaków przy wyszukiwaniu stringów w bazie oraz nie dopuszczam do sytuacji, w której ktoś może wpisać nazwisko typu KOWALSKI czy k0\/\/4L$k! i nie muszę w ogóle zamieniać wielkości liter. Oczywiście czasem może to być przydatne, kiedy dostaniesz np. złe dane albo musisz się babrać w czyimś projekcie (nader częsty przypadek).
Wtedy wystarczy funkcja a'la Gularz, tylko trochę mniej okazała:
Można też spróbować użyć:
Można też użyć gotowych funkcji w mysql. Ten post edytował Pilsener 26.01.2009, 08:41:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:21 |