Ztracený text a pomlčka z Wordu
Při práci na jednom projektu jsem narazil na zajímavý problém – občas se se záhadně ztrácely kusy textů v odeslaném emailu a některých výpisech. Chvíli jsem pátral v kódu, až se mi podařilo najít příčinu, která mi přijde natolik zajímavá, abych ji zde zmínil.
Za všechno může funkce iconv() (na PHP 5.2.1), použitá při konverzi z kódování UTF-8 do ISO-8859–2 a pomlčka, kterou ráda produkuje aplikace Microsoft Word, konkrétně se jedná o znak – neboli chr(150).
Pokud tento znak proženeme funkcí iconv(), funkce jej přeskočí, neboť pro něj nezná ekvivalent, a rovněž zahodí vše co je za ním.
Výsledkem následujícího kódu bude tedy pouze text „jedna“:
<?php echo iconv('utf-8', 'iso-8859-2', 'jedna–dve'); ?>
Řešení je prosté, např. stačí jednoduše při ošetřování uživatelského vstupu nahradit znak chr(150) za běžný znak minus, tedy chr(45).
<?php $text = str_replace('–', '-', $text); ?>
Jelikož někteří uživatelé webových aplikací používají Word pro přípravu textů docela často, je vhodné na tuto vlastnost při používání funkce iconv() pamatovat.