Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: szukam funkcji podobnej do htmlspecialchars
Forum PHP.pl > Forum > PHP
jolam
Potrzebuje zamieniać pojedyńcze znaki <,>, & i inne, ale jednocześnie chciałabym, żeby znaczniki HTML pozostawały niezmienione. Czyli <p> pozostaje <p> ale < jest zamieniane na odpowiednią encje.
Jest taka funkcja? Bardzo jej potrzebuję..
pozdrawiam Jola
kamil4u
Nie ma(prawdopodobnie) - ale możesz sobie napisać ją samemu(wbrew pozorom nie jest to wcale takie trudne) smile.gif
dr_bonzo
@fifi: ale to nie zadziala, bo to usuwa tagi, a > w " 123 > 10" nie jest tagiem.

@jolam
Domyslam sie zapisujesz tresc strony w bazie/pliku wraz z tagami html,a chcesz zeby pozostale &, <, > byly zamieniane na encje.

No raczej nie prosto to zrobic, bo jak jest tag zdefiniowany? <cos ...............> lub </cos>, a jak stwierdzisz ze tagiem nie jest "count<liczba ....... 21>10"
albo jak bedziesz chciala napisac artykul o tagach html? Nie bedziesz mogla zapisac "Tabelke zaczynamy od <table>".

Moze zainteresuj sie skladnia bbcode/wiki/itp jak np. Textile - mozesz zachowac podstawowe formatowanie htmlowe, i nadal zapisywac < > (z tego co widze to radzi sobie z luznymi < i > i akceptuje takze html <hr /> zamieni na linie.

Uzycie skladni: http://hobix.com/textile/
Klasa w php: http://textile.thresholdstate.com/

Albo zapisuj sobie & i < > od razu, recznie jako encje.
jolam
dr_bonzo ja w bazie danych nie trzymam całych stron. Może to błąd? Ale do pliku index.php podpinam funkcją include nagłówek, stopkę i inne stałe elementy szablonu. A jedynie to co się zmienia, czyli np treść artykułów pobieram z bazy. I właśnie problem w tym, że zwykle nie mam w tekstach żadnych znaków dziwnych smile.gif i dlatego nie musiałam zamieniać ich na encję ale ostatnio kilka takich wstawiłam w treść i już Validator informuje o błędzie. Dlatego spróbowałam użyć funkcji htmlspecialchars no i mi się wszystkie znaczniki paragrafów posypały sad.gif

Teraz dopiero dostrzegłam jakim problemem są znaczniki HTML w treści strony, dawniej widziałem tylko trudność w ich wstawianiu. A teraz już widzę, że jak nie da się ich odróżnić od tekst/treści to jest problem z funkcjami właśnie na treść działającymi. Powiedz czy jest jakieś inne rozwiązanie niż te inne znaczniki?

pozdrawiam serdecznie Jola

postscriptum
czy mógłby mi ktoś wskazać jakieś porównanie tych różnych systemów znaczników? albo króciuteńko napisać?

dr_bonzo
Cytat
Powiedz czy jest jakieś inne rozwiązanie niż te inne znaczniki?

Juz mowilem, skoro znasz html, jako edytor stron, to wpisuj tam prawidlowy hmtl, czyli to co ma wygladac jak <, > , & wpisuj jako encje.

Albo nie uzywaj tagow hmtl -> textile itp.
jmail
skoro cała treść ma być w bazie to po co chcesz to zamieniać? użyj dobrego edytora webowego na przykład fckeditor
gcdreak
Poprostu możesz użyć str_replace:
  1. echo str_replace('<', '&lt;',str_replace('>', '&gt;', $str))


Kolejne znaki zamienisz dodając kolejne poziomy.
jolam
dr_bonzo ja znam HTML ale encje nie są takie przyjazne jak ich normalne odpowiedniki, dlatego nie chce ich wpisywać. Poczytałam o tym bbcode i już się zdecydowałam prawie na jego zastosowywanie. Tak będzie najłatwiej dla mnie. Jedynie nie moge znaleźc funkcji PHP która zamieniałaby tekst ze znacznikami bbcode na znaczniki HTML. Mógłbys mi powiedzieć jak w takim razie mogę przekonweertowac tekst ze znacznikami bbcode na tekst ze znacznikami HTML?

pozdrawiam serdecznie Jola
Fifi209
preg_replace ?
gcdreak
@fifi209
Preg_replace jest wolniejsze id str_replace.
Zastosuj str_replace do zamiany znaczników albo tą klase.
krzysiej
ja używam nbbc, bardzo łatwo się go implementuje w kod, nie gryzie się z niczym i ma bardzo dobrą dokumentację
http://nbbc.sourceforge.net/
dokumentacja http://nbbc.sourceforge.net/doc
a przykładowy kod wygląda tak (bez tych spacji w tagach bbcode):
  1. <?php
  2. require_once("nbbc.php");
  3. $bbcode = new BBCode;
  4. print $bbcode->Parse("[ i ]Hello, World![ / i ] This is the magic of [ b ]BBCode[ / b ]!");
  5. ?>

to powyżej wyświetli:
Hello, World! This is the magic of BBCode!
czyli faktycznie:
  1. <i>Hello, World!</i> This is the magic of <b>BBCode</b>!
dadexix
A mozesz powiedziec po co Ci to jest potrzebne? moze nie jest problemem to CO uzywasz ale GDZIE i KIEDY...winksmiley.jpg
jolam
Ja wiem jak napisać taką funkcję gotową ale aż nie mogę uwierzyć, że w PHP jej nie ma? No bardzo się zdziwiłam. Taka popularna sprawa i albo sama musze napisać albo ściągać jakieś dodatki, które może nie na każdym serwerze będą działać.

pozdrawiam Jola
Fifi209
Cytat(jolam @ 14.08.2009, 19:07:14 ) *
Ja wiem jak napisać taką funkcję gotową ale aż nie mogę uwierzyć, że w PHP jej nie ma? No bardzo się zdziwiłam. Taka popularna sprawa i albo sama musze napisać albo ściągać jakieś dodatki, które może nie na każdym serwerze będą działać.

pozdrawiam Jola


To napisz sama? Kwestia kilku linijek dosłownie. No właściwie to i w jednej się zmieści.

  1. function nazwa($text) { return str_replace(array(), array(), $text); }
dadexix
Stworz tablice ze wszystkimi tagami html to bedzie fajnie:D
Fifi209
Cytat(dadexix @ 14.08.2009, 19:15:36 ) *
Stworz tablice ze wszystkimi tagami html to bedzie fajnie:D


Przecież wystarczy zamienić:
< > &
dadexix
Cytat
Potrzebuje zamieniać pojedyńcze znaki <,>, & i inne, ale jednocześnie chciałabym, żeby znaczniki HTML pozostawały niezmienione. Czyli <p> pozostaje <p> ale < jest zamieniane na odpowiednią encje.


tresc:
Kod
<div style="xx"><b>zamien to w </b> ten oto> > > sposob:D</b></div>


Edit: za pozno wyczailem ze Tobie chodzilo o pisanie funkcji do zamiany na bb codes... ale co ma do tego <,>,& to ja nie wiem:D
jolam
teraz to już raczej chodzi mi o funkcje zamieniającą html na bbcode i odwrotnie, na razie napisałam własną, ale może są gotowe i są lepsze, szybsze sama już nie wiem

A czy w bbcode są odpowiendiki tabel z html? bo by mi się przydaly takie tabele w bbcode

pozdrawiam Jola
Fifi209
Cytat(jolam @ 15.08.2009, 12:46:07 ) *
A czy w bbcode są odpowiendiki tabel z html? bo by mi się przydaly takie tabele w bbcode

pozdrawiam Jola


Szczerze to wątpię, ale są biblioteki gdzie możesz dodać swoje znaczniki etc.
jolam
fifi209 mógłbyś coś więcej napisać o tym? Jedyne co mi przyszło do głowy to zastąpienie <,> w znacnzikach tabel html na [,]. Dobrze to wymyśliłam?

Bardzo chciałam prosić o jeszcze jedną rzecz. Męczyłam si,ę z tym już bardzo długo, ale nie wiem jak to zrobić, a nie mogę znaleźć żadnego przykładu w internecie. Jak przy pomocy PDO utworzyć bazę SQLite a w niej tabelę z kolumnami. I jak wysyłać zapytania do tej bazy? Bardzo proszę o jakiś przykład, nie potrafię sama tego zrobić sad.gif
dr_bonzo
Cytat(jolam @ 15.08.2009, 16:33:07 ) *
Bardzo chciałam prosić o jeszcze jedną rzecz. Męczyłam si,ę z tym już bardzo długo, ale nie wiem jak to zrobić, a nie mogę znaleźć żadnego przykładu w internecie. Jak przy pomocy PDO utworzyć bazę SQLite a w niej tabelę z kolumnami. I jak wysyłać zapytania do tej bazy? Bardzo proszę o jakiś przykład, nie potrafię sama tego zrobić sad.gif



http://php.chinaunix.net/manual/en/ref.pdo....connection.php - tu masz jak definiuje sie polaczenie z PDO
PDO uzywasie TAK SAMO jak dla mysql/postgresql
a skladnie SQLite masz ... o dziwo na stronie sqlite.org (http://www.sqlite.org/lang.html )
krzysiej
Cytat(jolam @ 15.08.2009, 16:33:07 ) *
Jak przy pomocy PDO utworzyć bazę SQLite a w niej tabelę z kolumnami. I jak wysyłać zapytania do tej bazy? Bardzo proszę o jakiś przykład, nie potrafię sama tego zrobić sad.gif


  1. <?php
  2. $dsn = 'sqlite:abcd.db';
  3. try {
  4. $pdo = new PDO($dsn);
  5. $pdo->exec("CREATE TABLE users (id int, name VARCHAR)");
  6. $pdo->exec("DELETE FROM users");
  7. $pdo->exec("INSERT INTO users (name) VALUES('afif')");
  8. $pdo->exec("INSERT INTO users (name) VALUES('tipu')");
  9. $pdo->exec("INSERT INTO users (name) VALUES('robin')");
  10. }
  11. catch (PDOException $e)
  12. {
  13. echo 'Próba nawiązania połączenia zakończyła się niepowodzeniem: ' .
  14. $e->getMessage();
  15. }
  16. $result = $pdo->query("select * from users");
  17. foreach ($result as $row)
  18. echo $row['name'];
  19. ?>


jesli zastapisz
  1. $dsn = 'sqlite:abcd.db';
na
  1. $dsn = 'sqlite::memory:';
baza zostanie utworzona w pamieci operacujnej

a przykład żywcem z książki http://helion.pl/ksiazki/probph.htm
jolam
krzysiej bardzo Ci dziękuję teraz już widzę jak to ma być. Bardzo mi pomogłeś.
Nie rozumiem tylko tego try{} i catch (PDOException $e){}, co to takiego?
Bo to
$result = $pdo->query("select * from users");
foreach ($result as $row)
echo $row['name'];
to mogłabym zastąpić pętlą while tak jak w sqlite2? Dobrze myślę?

pozdrawiam Jola
jolam
nic z tego nie zrozumiałam sad.gif może znasz jakiś kurs w sieci gdzie byłoby coś o tym napisane?
dr_bonzo
@jolam: troche samodzielnosci, google i szukasz "exceptions php tutorial", nie bedziemy ci tu tlumaczyc wszystkiego czego nie wiesz i nie chce ci sie tego w necie znalezc.
jolam
wiem tyle, że to jakieś wyjątki związane z błędami ale co to ma do baz danych? czy sqlite da się jakoś ustawić kodowanie na utf-8? Jak mogłabym to zrobić?

Jola


Czy jest jakiś odpowiednik dla sqlite_fetch_single w pdo?
np kiedy pobieram ilosc rekordow albo parentid jakiegos obiektu i wiem ze wynik bedzie nie tablica lecz pojedynczy albo string albo integer to jak to zrobic w pdo?

mam również problem z obsługą błędów. W sqlite2 dostawałam dość szczegółowe komunikaty. Np syntaxerror blisko słowa IN. A tutaj jest gorzej z tym pdo, np jak zgubiłam przecinek miedzy deklarowaniem kolumn to później inserty przechodziły bez blednie ale nie dawały żadnego efektu. Co zrobić?

nie wiem również jak ustawić odpowiednik parametru SQLITE_ASSOC?

bardzo proszę o pomoc
Jola
dr_bonzo
http://php.net.pl/manual/en/book.pdo.php
Zapoznaj sie z lista metod, poczytaj co robia i wszystko bedziesz wiedziec.

A co do wyswietlania bledow,

http://php.net.pl/manual/en/pdo.setattribute.php +
PDO::ATTR_ERRMODE ustaw na wartosc PDO::ERRMODE_EXCEPTION
kajzur
Wyjątek występuję wtedy np kiedy masz błąd z połączeniem, a PDO właśnie takie wyjatki posiada i fajnie jest je przechwycić, poprzez blok try/catch. Co do błędów składni to może errorInfo() ?
jolam
No właśnie szukałam zawzięcie odpowiendika sqlite_fetch_single i nie znalazłam, podpowiesz mi jak on się nazywa?
szukałam też gdzie można ustawić SQLITE_ASSOC i również bezskutecznie. W ogóle PDO jest znacnziej gorzej udokumentowane i jest mniej przykładów niż dla sqlite2 sad.gif
prosze odpowiedz mi chociaż na te dwa pytania.

pozdrawiam Jola
dr_bonzo
Nie zapoznalas sie z manualem, a tam wszystko JEST

http://php.net.pl/manual/en/pdostatement.setfetchmode.php
http://php.net.pl/manual/en/pdostatement.fetchcolumn.php

Ostatnia porada z mojej strony.
jolam
zapoznałam się z manualem,
ale nadal nie moge znalexć funkcji odpowiadającej sqlite_fetch_single
jest przykład:
$pics = $db->query('SELECT COUNT(id) FROM pics');
$this->totalpics = $pics->fetchColumn();

ale to jakieś pokręcone jest, czy nie można jakoś prościej? W tym przykładzie jest jakies $this ->, które nier wime co znaczy, w ogóle to jakieś szaleństwo, w sqlite2 było dużo prościej, czy w pdo i sqlite3 nie da się tak? Po prostu żeby wynik otrzymać jako pojedyńczą zmienna?

pozdrawiam Jola
dr_bonzo
Cytat
ale to jakieś pokręcone jest, czy nie można jakoś prościej? W tym przykładzie jest jakies $this ->, które nier wime co znaczy, w ogóle to jakieś szaleństwo, w sqlite2 było dużo prościej, czy w pdo i sqlite3 nie da się tak? Po prostu żeby wynik otrzymać jako pojedyńczą zmienna?


To uzywaj sqlite2. Nie ucz sie nowych rzeczy. I sie nie rozwijaj. Ja cie zmuszac nie bede.
jolam
dr_bonzo to nie tak, że nie chce się uczyć nowych rzeczy. Wprost przeciwnie bardzo chciałabym! Ale jak widzę, że aby otrzymać ten sam efekt trzeba się napisać dużo więcej niż wcześniej, to ja się zastanawiam jaki to ma sens? Na swojej stronie dość często korzystam z sqlite_fetch_single. Chciałam przejść na PDO bo ponoć jest lepsze i później łatwiej byłoby mi przejść na postgresql i w ogóle jego uniwersalność, jedno dla wszystkich baz bardzo mi się spodobało. Programowania obiektowego dopiero się uczę, więc wiele z PDO mam trudności, często nie do końca rozumiem co się dzieje w kodzie, np tym który ostatnio wkleiłam z manuala. Ale mimo to zaczęłam zamieniać sqlite2 na PDO (przekonwertowałam bazę i teraz zamieniam zapytania). I okazuje się, że PDO nie ma wielu fajnych rzeczy np sqlite_fetch_single. I już sama nie wiem co mam zrobić. Może przejść na sqlite3 zamiast PDO? Jak byś mi poradził?

pozdrawiam Jola
ucho
Ja podziwiam wytrzymałość forumowiczów, Gdzie indziej już 10 wątków temu skończyło by się na "Kup jakąs ksiązkę do PHP, skoro nie potrafisz samodzielnie szukać informacji a nie nam bez przerwy d..uwagę zawracasz" tongue.gif
jolam
ucho myślisz, że mi jest przyjemnie kiedy tak co chwile pytam? Dla mnie to jest bardzo krępujące i deprymujące, że nie potrafiłam sobie sama poradzić. Przykro mi, że tylu z Was programistów mogących mi pomóc pisze jaka to ja zła jestem, że zawracam głowę. Jeśli nie chcecie mi pomóc to nie pomagajcie, ale nie musicie być złośliwi.

pozdrawiam Jola


postscriptum
nadal nie wiem co mam robić z tymi interfejsami, który wybrać, który będzie lepszy
viking
Na początek musisz przeczytać kurs obiektowego php. Jest tego w sieci sporo. Mówiłaś że "Programowania obiektowego dopiero się uczę" z czego może wynikać że rzeczywiście jakieś kroki podejmujesz a zadajesz pytanie o co chodzi z $this. No i jak tu pomóc? Akurat dokumentacja PDO jest napisana przejrzyście, ze sporą liczbą przykładów i jeśli tego nie rozumiesz to dlatego że brakuje Ci podstaw. Moja sugestia jest taka żebyś na razie nie korzystała z PDO, wróć do tego dopiero jak podniesiesz umiejętności.
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.