Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] str_replace i polskie znaki
statek
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 2.06.2009

Ostrzeżenie: (0%)
-----


Nie wiem czemu ale funkcja str_replace nie działa mi dobrze z polskimi znakami. Mam łańcuch znaków wpisany w kodzie php (edytor ma kodowanie utf-8), następnie zamieniam w tym łańcuchu znaki diakrytyczne na ich odpowiedniki w ascii: 'ą' na 'a', 'ć' na 'c' i tak dalej. I na stronie dostaje same znaki zapytania w miejsce polskich liter. Kodowanie strony jest utf-8 i teksty wpisane w htmlu są poprawnie wyświetlane. Co zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
drake88
post
Post #2





Grupa: Zarejestrowani
Postów: 283
Pomógł: 15
Dołączył: 22.03.2009
Skąd: Bytów

Ostrzeżenie: (0%)
-----


Kod
$cenzura = array('±', 'ć', 'ł', 'ó', '¶', ' ', 'ę', 'ń', 'ż', 'Ľ' );
$zamiana = array('a', 'c', 'l', 'o', 's', '_', 'e', 'n', 'z', 'z' );


Spróbuj tak.
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


lub
  1. <?php
  2. strtr($str,"ĄĆĘŁŃÓŚŻŹąćęłńóśżź","ACELNOSZZacelnoszz");
  3. ?>
Go to the top of the page
+Quote Post
statek
post
Post #4





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 2.06.2009

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedzi.
miałem coś takiego:
$cenzura = array('ą', 'ć', 'ł', 'ó', 'ś', ' ', 'ę', 'ń', 'ż', 'ź' );
$zamiana = array('a', 'c', 'l', 'o', 's', '_', 'e', 'n', 'z', 'z' );
$a=str_replace( $cenzura, $zamiana, $a);
czemu to nie działało? Dlaczego tak jest?

<?php
strtr($str,"ĄĆĘŁŃÓŚŻŹąćęłńóśżź","ACELNOSZZacelnoszz");
?>
to działa, a poprzednie nie.
Nic z tego nie rozumiem.
Go to the top of the page
+Quote Post
athei
post
Post #5





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


strtr nie działa dla UTF8 (dokument zapisany w utf8, oraz charset utf-8), dla iso-8859-2 owszem.
Sprawdź $tekst = "Zażółć gęślą jaźń";

Działa natomiast str_replace.
  1. <?php
  2. function clearDiacritics($sText)
  3. {
  4.  $aReplacePL = array('ą' => 'a', 'ę' => 'e', 'ś' => 's', 'ć' => 'c', 'ó' => 'o', 'ń' => 'n', 'ż' => 'z', 'ź' => 'z', 'ł' => 'l', 'Ą' => 'A', 'Ę' => 'E', 'Ś' => 'S', 'Ć' => 'C', 'Ó' => 'O', 'Ń' => 'N', 'Ż' => 'Z', 'Ź' => 'Z', 'Ł' => 'L');
  5.  return str_replace(array_keys($aReplacePL), array_values($aReplacePL), $sText);
  6. }
  7. echo clearDiacritics($tekst);
  8. ?>


Ten post edytował athei 13.07.2009, 19:32:52
Go to the top of the page
+Quote Post
statek
post
Post #6





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 2.06.2009

Ostrzeżenie: (0%)
-----


athei masz rację, omyłkowo sprawdzałem działanie strtr dla kodowania iso.
Ale dlaczego str_replace nie zadziałał w postaci w jakiej go podałem? Co zrobiłem źle? Czemu wyświetlał znaki zapytania zamiast odpowiedników ascii dla polskich liter? Proszę wytłumacz mi to, bo nie daje mi to spokoju. Od czego to zależy?

widzę, że indeksy w $aReplacePL zawierają ąęćś - polskie znaki diakrytyczne. Czy indeksy tablic asocjacyjnych nie muszą być ascii?

Pozdrawiam.
Go to the top of the page
+Quote Post
athei
post
Post #7





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


1.Nie wiem jak użyłeś swój kod, ale mi działa
  1. <?php
  2. $a = 'Zażółć gęślą jaźń';
  3. $cenzura = array('ą', 'ć', 'ł', 'ó', 'ś', ' ', 'ę', 'ń', 'ż', 'ź' );
  4. $zamiana = array('a', 'c', 'l', 'o', 's', '_', 'e', 'n', 'z', 'z' );
  5. $a=str_replace( $cenzura, $zamiana, $a);
  6. echo $a; // Zazolc_gesla_jazn
  7. ?>

2. nie
Go to the top of the page
+Quote Post
statek
post
Post #8





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 2.06.2009

Ostrzeżenie: (0%)
-----


athei już się chyba wyjaśniło, wcześniej przed str_replace użyłem strtolower. I właśnie ta funkcja namieszała. Po jej wycięciu jest ok - musiałem dopisać zamiany dla wielkich liter i dopiero potem zamiana na małe literki. Czemu strtolower tak brzydko się zachowuje? W manualu znalazłem: Note that 'alphabetic' is determined by the current locale. Czyli pewnie gdzieś w konfiguracyjnym pliku mogę przestawić na polski alfabet, ale to czyni skrypt/stronę zupełnie nie przenośną - nie zawszę będę miał dostęp do konfiguracji php. Czy da się zmienić ten "local" i w ogóle domyślne kodowanie zawsze i wszędzie na utf-8 z poziomu skryptu php?
Go to the top of the page
+Quote Post
athei
post
Post #9





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


strtolower nie działa dla UTF8 tak samo jak np. ( strlen, strpos, strrpos, substr, strtoupper, ord, chr) i wiele innych.
mb_strtolower natomiast działa.
Go to the top of the page
+Quote Post
statek
post
Post #10





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 2.06.2009

Ostrzeżenie: (0%)
-----


athei nie wiedziałem o tym (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Teraz zaczynam sobie przypominać pewne trudności i to jak musiałem na około je rozwiązywać, teraz wiem, że to ze względu na ten brak wsparcia dla utf-8. Szczerze mówiąc, to fatalna wiadomość, mam nadzieje, że w przyszłych wersjach PHP będzie to poprawione.

Pozdrawiam.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 06:53