Autor Zpráva
logic
Profil *
Poradí mi někdo s tímto?
Proměnná $test má vrátit část souboru od bytu 1200 až po konec souboru.
$contents = mb_ereg_replace("@".preg_quote($original_line)."@","                ".$newline,$contents,"m");
$test = mb_substr($contents, 1200, mb_strlen($contents, "UTF-8"),"UTF-8");
die($test);
Výsledek $test není správný, protože je kratší než by měl být. Co dělám špatně?
ShiraNai7
Profil
Možná:
$test = mb_substr($contents, 1200, 1200 - mb_strlen($contents, "UTF-8"),"UTF-8");

Každopádně používat preg_quote spolu s mb_ereg_replace mi přijde divné, navíc myslím, že ereg_x či mb_ereg_x je již deprecated.
logic
Profil *
Podle tohoto příkladu z manuálu php by to mělo být dobře:

<?php
function mb_ucfirst($str, $enc = 'utf-8') {
    return mb_strtoupper(mb_substr($str, 0, 1, $enc), $enc).mb_substr($str, 1, mb_strlen($str, $enc), $enc);
}
?> 
ShiraNai7
Profil
logic:
Třetí parametr mb_substr je $length, tj. délka, nikoliv offset či index, takže je výsledná pozice větší, než délka řetězce. Funkci to možná nevadí, ale každopádně to není správný postup.

Jak že s původním dotazem souvisí implementace mb_ucfirst?
logic
Profil *
NIjak, vzal jsem jenom to co bylo na stránkách manuálu. Takže to tam mají špatně?

Ale 1200-mb_strlen($contents, "UTF-8")
mi prostě nevrací žádný výsledek (žádný text není vidět).
ShiraNai7
Profil
logic:
Zkus:
mb_strlen($contents, 'UTF-8') - 1200
Omylem jsem prohodil operandy.

Spíš zkus popsat, čeho se snažíš dosáhnout? Určitě to lze řešit jednodušeji.
mimochodec
Profil
1200-mb_strlen($contents, "UTF-8") musí vrátit číslo.
logic
Profil *
mb_strlen($contents, "UTF-8")

vrací

1594

tedy
1200-1594


Takže
( mb_strlen($contents, "UTF-8")-1200 )
máme číslo 394
tedy to je jako
$test = mb_substr($contents, 1200, 394,"UTF-8");
a to už funguje.

Takže dík.

Jen poznámka. Já jsem přehodit operandy zkoušel, ale omylem jsem to -1200 umístil za příkaz mb_substr(); proto mi to nefungovalo.

Co se týče mb_ereg_replace, zkoušel jsem celkem tři varianty, str_replace a preg_replace mi selhalo co do správnosti výsledku.

  // FAILED: $contents = str_replace($original_line,"                ".$newline,$contents);
  // FAILED: $contents = preg_replace("@".preg_quote($original_line)."@su","                ".$newline,$contents);
  $contents = mb_ereg_replace("@".preg_quote($original_line)."@","                ".$newline,$contents,"m");
ShiraNai7
Profil
logic:
A o co že se snažíš? Co má ten kód dělat?
logic
Profil *
Už je to v pohodě, už se mi povedlo rozjet ten preg_replace. Zaměňuju jeden řádek (první příkaz). Ten druhý příkaz jsem potřeboval, abych mohl udělat kontrolu na konci, že nedošlo k chybě. Tím, že jsem to opravil, už tam nebudou vznikat chyby, takže asi bude stačit ten preg_replace.

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: