Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Polskie litery i funkcje zmiany wielkości znaków
Forum PHP.pl > Forum > PHP
Myrek
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.
^Socrat^
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,
Myrek
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.
Myrek
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
nido
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ą
Gularz_pl
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.
Pilsener
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.
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.