Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Treść wizualnie dokładnie taka sama
Forum PHP.pl > Forum > PHP
Krzychur
Witam!
Już od jakiegoś czasu próbuje rozwiązać mikroskopijny problem (który jest obecny w IPB, phpBB, ale np. allegro go nie ma), polegający na umieszczeniu domyślnej treści formularza wyświetlonej dokładnie w ten sam sposób, jak została wprowadzona. Mam na mysli wszystkie znaki specjalne, które użytkownik widzi w np. polu textarea.

Aby to dokonać [powierzchownie] wystarczy zwykłe zastosowanie stripslashes i htmlspecialchars na treści przekazanej w formularzu i jakiś preg dla znaków specjalnych innych od <, >, &.

  1. <?php
  2. $content = htmlspecialchars(stripslashes(isset($_POST['abc']) ? $_POST['abc'] : ''));
  3. $content = preg_replace('#&#([0-9]+);#','�1;',$content);
  4. echo '<form method="post">
  5. <textarea name="abc">'.$content.'</textarea>
  6. <input type="submit" />
  7. </form>';
  8. ?>


Ale...
Wprowadzając znaki specjalne różne od <, >, & w postaci wizualnej, encji angielskiej i encji numerycznej pojawiają się problemy. Wstawiając do formularza np. znaczka « [lewy znak cytowania] np. poprzez kopiowanie, czy kombinacje alt+numerki, po wysłaniu zostanie on odczytany jako 8#171; [oczywiście &=8]. Jeżeli obok umieścimy encję wpisaną ręcznie: 8#171;, to zostanie ona również automatycznie zamieniona na znak specjalny, jedynie « zostanie wyświetlone dokładnie z oryginałem.

Teraz do jeszcze raz powtórzę do czego zmierzam:
Chcę, zobaczyć w okienku textarea dokładnie taką samą treść jaką wysłałem, na IPB, phpBB to nie działa w sposób 100%. Dowód:
Wysyłam: « - 8laquo; 8#171;
Otrzymuję: « - 8laquo; « lub « - « - «
Chcę otrzymać: « - 8laquo; 8#171;

Encja numeryczna zamieniana wyświetlana jest od razu jako znak specjalny.
Encja angielska widoczna jest jako encja, ale w formularzu wyświetlana jest jako znak specjalny.

Sami możecie sprawdzić na podglądzie.

Czekam na dyskusję.
dr_bonzo
Przenosze z pr0 do php
em1X
Wybacz za tak powierzchowną odpowiedź, ale czy próbowałeś htmlentities" title="Zobacz w manualu php" target="_manual ?
Krzychur
Nigdy z tej funkcji nie korzystałem, ale po sprawdzeniu ona nie rozwiąże tego problemu, a nawet nie ma podstaw najmeniejszych do rozwiązania tego problemu.

Wysyłając znak specjalny w postaci widocznej np. "Ť" zostaje on automatycznie zamieniony na encje numeryczną, więc wpisawszy gdzieś obok encję numeryczną skrypt nie indetyfikuje co jest co. Jak odkryłem w poprzednim poście nawet encja angielską sprawuje się 50/50%.

Spróbuj wpisać tą treść: Ť - 8laquo; 8#171;
gdzieś w IPB, a zobacz różnicę np. wpisując na allegro [kliknij rejestrację, wpisz te ogonki w imieniu, zmieniając 8 na &, zawtiwerź OK i masz po chwili w formie dokładnie to co wpisałeś].
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.