Autor Zpráva
Milkys
Profil
Dobrý podvečer,
doufám, že už máte metličky upleteny a bude mít někdo čas mi pomoci.
Potřebuji, aby za h2 nebylo br
Mám toto:
<h2>Nějaký nadpis</h2> 
<br/>Nějaký text<br/>
A potřebuji to dostat aspoň takto:
<h2>Nějaký nadpis</h2><br/>Nějaký text<br/>
Zatím se mi to podařilo jen takto:
<h2>Nějaký nadpis</h2> <br/>Nějaký text<br/>
Funguje na to jen regulár /\s/, ale ten mi zruší úplně všechny bíléznaky v řetězci což nechci. Když použiji \n nebo \r nebo oboje v zoufalosti tak stejně ty </h2> a <br/> k sobě nedostanu. Až je budu mít u sebe tak už vím jak se toho br zbavit.

Děkuji za reakce
Alphard
Profil
Jestli jde o to odstranění br, nebylo by lepší vyřešit to v jednom kroku?
$s = preg_replace('~</h2>\\s<br/>~Uis', '</h2>', $in);
Milkys
Profil
Alphard:
Ano, samozřejmě, že bych to rád jen v jednom kroku, ale nejsem guru v php natož v regulárech. Zatím ovládám jen, troufnu si říci základy.
Proměná $intro je ten řetězec v prvním příspěvku, který potřebuji nahradit
Měl jsem to také podobně:
$intro1 = trim("$intro");
$intro2 = preg_replace('~</h2>\s<br/>~', '</h2>', $intro1);
echo $intro2;
Nefunkční a to tvoje mi také nefunguje. Aplikoval jsem to v této podobě:
$intro1 = trim("$intro");
$intro2 = preg_replace('~</h2>\\s<br/>~Uis', '</h2>', $intro1);
echo $intro2;
Všemu bych asi rozumněl jak si to napsal jen to "Uis" mi zatím hlava nebere.
Alphard
Profil
[#3] Milkys
To jsou modifikátory.
Za regulár se omlouvám, zksute tohle
$s = preg_replace('~</h2>\\s*<br/>~Uis', '</h2>', $in);
Milkys
Profil
Alphard:
také druhý pokus nic neudělá. Bez omluv, nejsem cíťa.
Alphard
Profil
[#5] Milkys
Ten už jsem vyzkoušel, když to nejde na první dobrou, radši testnu.

Můj kód:
<?php

$in = "<h2>Nějaký nadpis</h2> 
<br/>Nějaký text<br/>";

$s = preg_replace('~</h2>\\s*<br/>~Uis', '</h2>', $in);

echo $s;


Výstup:
<h2>Nějaký nadpis</h2>Nějaký text<br/>

Jestli to nejde, ukažte text, kam to aplikujete. Napadá mě třeba mezera v br, tj. <br />, ale nechtěl jsem to komplikovat.
Milkys
Profil
Alphard:
mám to na locale. Na vostro bych si to nedovolil. Jak to mohu ukázat?
Mezera v br není na tyhle detaily si dávám pozor. Ale řeknu postup jak jsem se k tomu dopracoval, protože tam bude asi něco jiného. Tvůj regulár je funkční, ale ne na můj řetězec. Musím se omluvit já, že buzeruju, ale aspoň nějaký pokrok.

Mám toto:
function nahrada($vystup)
{
    $pole=array(
        '<em>' => '',
        '</em>' => '',
        '<strong>' => '',
        '</strong>' => '',
        '<b>' => '',
        '</b>' => '',
        '<a>' => '',
        '</a>' => '',
        'm2' => 'm<sup>2</sup>',
        'm3' => 'm<sup>3</sup>',
        '<p>' => '<br/>',
        '</p>' => '',
        '<br>' => '<br/>',
        '<br/> <br/>' => '<br/>',
         '<br/><br/>' => '<br/>',
         '</h2><br/>' => '</h2>',
        '<br/><h2' => '<h2'
        );
    return strtr($vystup,$pole);
}

$vstup = "<p> </p>
<p>Nějaký text</p><p>Další text</p>";
$vystup = '<h2>Nějaký nadpis</h2>'.$vstup';
Proměnou $vstup uloží někdo, kdo třeba nebude znát html a nechci spoléhat, že pokud ho bude znát, že nezapomene uzavřít párový tag. Proto to ošetřím jak nejlépe umím:

$vystup = nahrada($vystup);
$vystup = preg_replace('~</h2>\\s*<br/>~Uis', '</h2>', $vystup);
echo nahrada($vystup);
?>
No a právě tady ten regulár nefunguje. Zkusím to vyřešit jinak. V podstatě potřebuji, aby proměná $vstup nezačínala tagem, ale prostým textem a uvnitř textu, aby byly zachovány tagy.
DarkMeni
Profil
Jestli jediný co nechceš, je aby proměnná vstup nezačínala html značkou (jakoukoliv), tak můžeš zkusit něco jako:
preg_replace('/^<.*?>/i', '', $promenna); A nebo uživatele omezit třeba jen na některý formáty textů (tučně, kurzívovu, podtrženě, barevně, odkaz, obrázek... - tím vlastně ani nemůže zrušit zbytek stránky (ne)uzavřením třeba <div>), třeba přes bb kódy, a převádět to jen v případě, že je ten bb kód uzavřen (takže html zakázat přes htmlspecialchars nebo strip_tags): preg_replace('-\[(b|u|i)\](.*?)\[/\1\]-is', '<$1>$2</$1>', $promenna);//Regulár, jak by mohlo vypadat převádění jednoduchých bb (ale nejsem si jistej zpětnou referencí ve vzoru, jestli tam je \ nebo taky $)
Ugo
Profil
OT: co když zadám <EM>nazdárek ? tyhle náhrady sou vždycky kříž, snažil bych se určit snadný pravidlo pro tebe a to dodržet co nejlehčí cestou, často jsou to kupodivu mnou nemilované pomalé reguláry :) a pokud sou omezení velká, tak vlastní značky a čistě napsaný html úplně vynechat
Milkys
Profil
Děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: