| Autor | Správa |
Han5vk
 Užívateľ
 Založený: 17.11.2011 Príspevky: 21
 | Zaslal: Št 17.11.11 22:18 |   |
Zdravím, mám problém s týmto kódom
| kód: | function nahrada($m) {
return $m[1] . htmlspecialchars($m[2], ENT_QUOTES, 'UTF-8', false) . $m[3];
}
preg_replace_callback('~(<pre>)(.*)(</pre>)~isU', 'nahrada', $text); |
Tento kód má za úlohu prehodiť všetky HTML znaky na entity, no keď do premennej $text načítam súbor, v ktorom je napríklad toto
| kód: | preg_match_all("/<h2>(.*)<\/h2>/Us",$text,$nadpis, PREG_SET_ORDER);
echo "<h2>";
echo $nadpis[0][1];
echo "</h2>"; | (Výpis h2jek zo súboru na výpis článkov)
Tak spracuje všetko po značku <h2>. Túto značku vyhodnotí, a potom už nič. Nevypíše obsah echa, ale vypíše mi celý kód ako ";echo $nadpis [0][1];echo... Viete mi poradiť aký je tu problém? |
| |
  |
 |
Ďuri
 Administrátor
 Založený: 11.08.2007 Príspevky: 3785 Bydlisko: Brno
 | Zaslal: Št 17.11.11 23:01 |   |
Ten tvoj horny kod nerobi to, co si mozno predstavujes - on na entity prevedie iba tie znaky, ktore su medzi <pre> a </pre>. Takze by bolo asi vhodne ujasnit si, co presne pozadujes, a ten kod, ktory chces v HTML interpretovat presne tak, ako je, dat bud do <pre> a podhodit tej funkcii, alebo upravit funkciu.
A dalsia vec, ty ocakavas, ze ten spodny kod sa ti bude vykonavat? Lebo tak nejak som to pochopil z tvojho "Nevypíše obsah echa". |
| |
    |
 |
Han5vk
 Užívateľ
 Založený: 17.11.2011 Príspevky: 21
 | Zaslal: Pi 18.11.11 15:20 |   |
Viem, že sa to má prehadzovať len medzi značkami <pre>, a ten spodný kód má vybrať zo súboru $text obsah medzi tagmi <h2> a potom ho echom vypísať, a to aj robí, ak ho otvorím samostatne, no keď ho otvorím v tom hornom a následne celý vypíšem tak mi to najskôr ten horný kód odserie... Zjednodušene, keď otvorím celý súbor (z ktorého mám časť v druhom kóde) samostatne, tak robí čo má. No keď ho otvorím v nadradenom súbore (z ktorého je prvý kód), načítam ho do premennej, prebehnem cez ten prvý kód a vyechujem to čo mi výjde z preg_replace_callback tak to po spomínanej značke <h2> odchádza.
// pridané po 16 hodinách 7 minútach od posledného príspevku
Tak čo je s tým? |
| |
  |
 |
Ďuri
 Administrátor
 Založený: 11.08.2007 Príspevky: 3785 Bydlisko: Brno
 | Zaslal: Pi 18.11.11 15:39 |   |
Nenahanaj nas, nikto tu nie je povinny odpovedat ti.
Mohol by si zaslat co najjednoduchsi, ale kompletny kod, ktory by sme len spustili a videli by sme, aky je vystup a aky konkretny vystup by si si miesto toho predstavoval? Nemozeme vediet, ci chybu nerobis niekde inde, a cim podrobnejsie sa svoju situaciu snazis popisat, tym viacej som domotany. |
| |
    |
 |
Han5vk
 Užívateľ
 Založený: 17.11.2011 Príspevky: 21
 | Zaslal: So 19.11.11 12:43 |   |
Prepáč, v hlavnom súbore (weby.php) mám to menenie HTML entít-
| kód: | if (!isset($_GET['clanok'])) {
$strankaa= "index"; }
else {$strankaa= $_GET['clanok'];}
$soubor= "weby/".$strankaa.".php" or ".html" ;
if (!file_exists($soubor)) {
$soubor= "nenaslo.php"; };
$vstup= file_get_contents($soubor);
function nahrada($m) {
return $m[1] . htmlspecialchars($m[2], ENT_QUOTES, 'UTF-8', false) . $m[3];
}
$vypis = preg_replace_callback('~(<pre>)(.*)(</pre>)~isU', 'nahrada', $vstup);
echo $vypis; |
Potom mám vo vypísanom súbore (premenná $subor- vstup $vypis- vystup toho HTML konvertovania) takýto kód:
| kód: |
if (!isset($_GET['clanok'])) {
$stranka= "index"; }
else {$stranka= $_GET['clanok'];}
$subor= "weby/".$stranka.".php" or ".html" ;
if (!file_exists($subor)) {
$subor= "nenaslo.php"; };
$soubor="1"; // Základná hodnota
// OVEROVANIA
while (file_exists("weby/".$soubor.".php")) { // $subor zväčšujem kým existuje
$vyber = $soubor; // načítam ho aj do $vyber
$soubor++;} // $subor zväčšujem kým existuje
while (file_exists("weby/".$vyber.".php")) { // kým existuje $vyber
// VYBER SLOV
$text= file_get_contents("weby/".$vyber. ".php"); // otvorím momentálny súbor
preg_match_all("/<h2>(.*)<\/h2>/Us",$text,$nadpis, PREG_SET_ORDER);
echo "<h2>";
echo $nadpis[0][1];
echo "</h2>";
preg_match_all("/<small>(.*)<\/small>/Us",$text,$male, PREG_SET_ORDER);
echo "<small>";
echo $male[0][1];
echo "</small>";
preg_match_all("/<p>(.*)<\/p>/Us",$text,$obsah, PREG_SET_ORDER);
echo "<p>";
$slov = 40; // počet slov ve zkráceném článku...
$text_out = explode(" ", $obsah[0][1]); // spočítání slov podle mezer
for($y=0; $y < $slov; $y++) { // cyklus pro zobrazení zadaného počtu slov
// VYPIS
if (isset($text_out[$y])) {
echo $text_out[$y]." "; } ; // Výpis zkráceného článku
}
echo "...</p>";
echo "<a href='?str=weby&clanok=" .$vyber. "' class='citaj'>";
echo "(Čítaj viac)";
echo "</a>";
echo "<br><br>";
// ETC.
$vyber--; // Zmenšujem číslo súboru a beží to znova
} |
Prepáčte, za tú fúru kódu, ale vážne netuším, čo môže z toho byť najdôležitejšie :/ K tomu čo to robí a to čo to má robiť. Hlavný súbor (weby.php) má zmeniť všetky HTML znaky na entity (medzi značkami <pre>) a do tohto súboru vkladám súbor index.php, ktorý mi vypisuje články (prvých 40 slov). Tento súbor index.php funguje samostatne, ale ak ho vložím do hlavného súboru weby.php a tam mám tú funkciu na zmenu HTML značiek tak mi to vysype von iba kód, tzn. nespracuje ho, len ho prosto vypíše celý na výstup. Toto mi vypisuje až po značke <h2> v prvom preg_replace_callback(). Prakticky mi to spracuje HTML značky, ale zvyšok kódu nie, takže sa mi žiadne kúsky článkov nezobrazia, akurát tak kódy ktoré ich majú vytiahnúť. Snáď ste pochopili aspoň niečo.
// pridané po 1 hodine 36 minútach od posledného príspevku
Vie niekto prečo to hapruje? |
| |
  |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
|