Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy zapisywać ó do bazy danych jako encja?
Forum PHP.pl > Forum > PHP
adamantd
Witam!
Problem pojawił się w edytorze ckEditor, który jak się zorientowałem zamienia ó na "ó" -mam sporo tekstów w bazie i wszędzie jest "ó" zamiast ó. Jak to rozwiązać? Czy zostawić tak jak jest i kolejne też tak zapisywać? Czy zamienić wszystkie "ó" we wszystkich tekstach na ó i pogrzebać w ckEditorze, żeby zapisywał normalnie? W przeglądarce teksty wyświetlają się prawidłowo ale czy może to mieć jakiś negatywny wpływ np. na wyszukiwanie tekstów w wyszukiwarce google? ktoś wpisuje w wyszukiwarce wyraz lub całe zdanie przez ó a nie przez "ó" jeżeli są w nim zawarte....

Pozdrawiam
skowron-line
Zadaj sobie pytanie (jedno z wielu)
Czy będę miał wyszukiwarkę na stronie ? I czy będzie ona szukała fraz w tekście ?
c1chy
znalazłem 2 opcje które mogą być za to odpowiedzialne:

http://docs.cksource.com/ckeditor_api/symb....entities_latin

lub

http://docs.cksource.com/ckeditor_api/symb....html#.entities

to raczej strzał w ciemno, bo z cke nie korzystam smile.gif
adamantd
skowron-line

mam wyszukiwarkę na stronie i wyszukuje w tytule i właśnie w tekście w kilku tabelach
jakie mam sobie jeszcze zadać pytanie? to które sobie już zadałem mówi mi o tym, że koniecznie muszę pozamieniać wszystkie encje z powrotem na ó

c1chy
dzięki już gzdieś o tym czytałem, w razie czego jak nie w configuracji ckeditora to poradzę sobie z poziomu php np preg_replace przed zapisem do bazy
Crozin
ó jako "ó" ma sens wyłącznie w dokumentach HTML oraz innych XML-owatych z odpowiednio przygotowanym zestawem encji. Tak, więc jeżeli chcesz wykorzystywać dane w bazie do czegokolwiek poza wyświetlaniem ich we wcześniej wspomnianych dokumentach musisz zrezygnować z przechowywania znaków w formie encji.
adamantd
Ok rozumiem -w takim razie pozamieniam wszystko

a tu przy okazji mam pewien problem, ponieważ z dziwnych przyczyn nie chce mi prawidłowo zadziałać funkcja podczas zamiany

  1.  
  2. str_replace('ó', 'ó', $text);//nie zamienia w ogóle
  3.  
  4. preg_replace("/\&oacute\;/", 'ó', $text);//po pierwszej napotkanej encji urywa tekst
  5.  
  6.  
  7. preg_replace("/\&oacute\;[^.]*/", 'ó', $text);//nie zamienia w ogóle
  8.  
  9.  
  10.  



co robię nie tak?
skowron-line
  1. preg_replace("/\&oacute\;/g", 'ó', $text);//po pierwszej napotkanej encji urywa tekst
tu nie powinno być jeszcze g (global)
adamantd
Mi z tym "g" jeszcze nigdy nie zadziałało wyrażenie regularne w php smile.gif w javiescript tak. jak nie ma ograniczników początek i koniec wiersza /^xxxxxxxx$/ to jedzie od początku do końca i nie trzeba g. Z g wywala mi błąd
Crozin
@skowron-line: Chyba sobie pomieszałeś z JS.
@adamantd: przecież zwykłe str_replace załatwia sprawę: http://ideone.com/DcyLBU
  1. <?php
  2.  
  3. $pre = 'Ala miała kilka kotów.';
  4. $post = str_replace('ó', 'ó', $pre);
  5.  
  6. var_dump($pre, $post);
Kod
string(30) "Ala miała kilka kotów."
string(24) "Ala miała kilka kotów."


EDIT: Durny skrypt forum zamienia "& oacute ;" w postach na "ó". wink.gif
adamantd
//dla testów zmieniłem na pojedyncze id foreach zostawiłem

  1.  
  2. $re = dbManag::selSql("SELECT id, text FROM tabela WHERE id=63");
  3. foreach($re as $ki){
  4.  
  5. $newTxt = str_replace("&oacute;", 'ó', $ki['text']);
  6. dbManag::editBase("UPDATE tabela SET text='{$newTxt}' WHERE id='{$ki['id']}'");
  7.  
  8. var_dump($ki['text']);//string(13) "żółw"
  9. var_dump($newTxt );//string(6) "ż�łw" //nie wiem czy się to wyświetli na forum ale tutaj zamiast ó jest czarny rąb z pytajnikiem
  10.  
  11. //a w bazie pozostaje samo ż
  12. }
  13.  
  14.  
  15.  
  16.  
  17. //druga opcja to zamiana ó na ó tak jak pokazał Crozin:
  18. $newTxt = str_replace("ó", 'ó', $ki['text']);
  19. var_dump($ki['text']);//string(13) "żółw"
  20. var_dump($newTxt );//string(13) "żółw"
  21.  
  22.  
  23. //a w bazie nie zmienia się nic
  24.  



musi się to dać jakoś zrobić... może coś z kodowaniem? na stronie mam utf8 w bazie utf_general_ci

hehe teraz doczytałem, że crozin poleciłeś zamienić & oacute na ó tylko, Ci zamieniło smile.gif tak czy inaczej nie działa

Uporałem się, pół dnia zmieniałem w bazie encje na ó ręcznie.. na szczęście nie było tych rekordów aż tak dużo, nie wszystkie są wprowadzane przez ckeditor. Ale problem wyżej i tak nie został rozwiązany. str_replace działa bez zarzutów dopóki nie chcę zapisać sformatowanego tekstu do bazy. Ale już ten problem mnie nie dotyczy smile.gif Pozdrawiam
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.