Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Polskie litery i funkcje zmiany wielkości znaków
Myrek
post
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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
^Socrat^
post
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. biggrin.gif
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
Go to the top of the page
+Quote Post
Myrek
post
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.
Go to the top of the page
+Quote Post
Myrek
post
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 biggrin.gif
Go to the top of the page
+Quote Post
nido
post
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ą
Go to the top of the page
+Quote Post
Gularz_pl
post
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
Go to the top of the page
+Quote Post
Pilsener
post
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:
  1. <?php
  2. $tresc = strtr($tresc, 'ĄŚŹ...', 'ąśź...');
  3. ?>


Można też spróbować użyć:
  1. <?php
  2. $arrLocale = array( "pl_PL", "polish_pol" );
  3. setlocale(LC_ALL, $arrLocale );
  4. ?>


Można też użyć gotowych funkcji w mysql.

Ten post edytował Pilsener 26.01.2009, 08:41:55
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:21