{"id":89,"date":"2008-10-23T01:32:03","date_gmt":"2008-10-22T22:32:03","guid":{"rendered":"http:\/\/yeti.albascout.ro\/blog\/?p=89"},"modified":"2008-10-23T01:32:03","modified_gmt":"2008-10-22T22:32:03","slug":"up11-site-rollin-on-yphp","status":"publish","type":"post","link":"https:\/\/yeti.albascout.ro\/blog\/up11-site-rollin-on-yphp\/","title":{"rendered":"UP11 site rollin&#039; on yPHP"},"content":{"rendered":"<p>I-am dat drumul. Adic\u0103 am trimis invita\u0163ia, am pus sus site-ul \u015fi informa\u0163iile existen\u0163iale, lucrurile se mi\u015fc\u0103 pe partea de logistic\u0103, lucrurile se mi\u015fc\u0103 pe partea de program, n-a\u015f \u00eendr\u0103zni s\u0103 zic c\u0103 ne merge super dar avem loc de mi\u015fcare.<\/p>\n<p>Site-ul \u00eel pute\u0163i vedea la <a href=\"http:\/\/www.unitatesiprietenie.ro\/\">http:\/\/www.unitatesiprietenie.ro\/<\/a>, \u015fi este bazat pe <strong>yPHP<\/strong>. Tot setup-ul a durat una sau dou\u0103 ore, \u00een condi\u0163iile \u00een care am gasit bug-uri prin structura yPHP \u015eI am avut evident probleme cu encoding-ul. M\u0103 \u00eennebunesc problemele cu encoding-ul \u00een ultima vreme, nu suport s\u0103 nu fie textul cu diacritice \u015fi \u00eentotdeauna fie baza de date fie PHP-ul\u015f vrea s\u0103 mess with me pe chestia asta.<\/p>\n<p>Spre exemplu, pentru wiki-ul primitiv folosit de yPHP acum, imi trebuia un titlu unic pentru pagin\u0103, pe care \u00eel gaseam, dup\u0103 moda Wiki (nu \u015ftiu dac\u0103 mai \u0163ine moda asta, da o fost a\u015fa acum ceva vreme), cu toate cuvintele cu prima liter\u0103 mare \u015fi al\u0103turate. Spre exemplu pagina &#8222;ONCR Festival cerceta\u015fi&#8221; s-ar traduce \u00een &#8222;OncrFestivalCerceta\u015fi&#8221;.<\/p>\n<p>Evident, o problem\u0103 aparent simpl\u0103. Doar c\u0103 dac\u0103 faci <em>ucfirst()<\/em> pe un string care e encodat cu utf-8, rezultatul e un string pe encoding standard (nu \u015ftiu exact <strong>care <\/strong>standard \u00eei &#8211; poate cp1251, doar c\u0103 nu \u015ftie de caractere rom\u00e2ne\u015fti). Super, deci<\/p>\n<blockquote><p><em>ucfirst($string)<\/em><\/p><\/blockquote>\n<p>devine<\/p>\n<blockquote><p><em>mb_strtoupper(mb_substr($string, 0, 1, &#8222;utf-8&#8221;)).mb_substr($string, 1, strlen($string) &#8211; 1, &#8222;utf-8&#8221;).<\/em><\/p><\/blockquote>\n<p>That is in no way cool. Unde mai pui c\u0103 suportul pentru <em>mb_string<\/em> \u00een PHP e absolut op\u0163ional \u015fi host-ul meu (care sunt <strong>rom\u00e2ni<\/strong>) nu \u00eel are instalat. Deci no joy.<\/p>\n<p>Acum c\u00e2teva zile, tot probleme de encoding. De data asta, pe conexiunea MySQL. Aten\u0163ie pentru cine mai d\u0103 de probleme de genul \u0103sta. Dac\u0103 MySQL v\u0103 salveaz\u0103 diacriticele ca ? (semne de \u00eentrebare), sunt c\u00e2teva chestii care le pute\u0163i verifica.<\/p>\n<p>1. MySQL are o dr\u0103cie care se nume\u015fte <strong>collation<\/strong>, care e un atribut care se poate aplica p\u00e2n\u0103 la nivel de coloan\u0103, \u015fi \u0163ine de encodingul folosit \u00een coloanele respective. Aten\u0163ie, \u015fi tabelul are proprietatea <strong>collation <\/strong>\u015fi conteaz\u0103. Problema mea de ieri se \u00eent\u00e2mpla \u00een contextul \u00een care toate c\u00e2mpurile tabelului erau pe <em>utf8_general_ci<\/em>, dar tabelul, care era proastp\u0103t importat, era setat pe default-ul <em>latin_sweedish<\/em>_<em>ci<\/em>, care nu se \u00een\u0163elege <strong>deloc <\/strong>cu diacriticele.<\/p>\n<p>2. Asigura\u0163i-v\u0103 c\u0103 discu\u0163ia \u00eentre server \u015fi clientul vostru se face prin utf8. Sunt mai multe chestii \u00een manualul MySQL despre cum se poate seta asta. Pentru c\u0103 evident n-am avut chiar vreme (site-ul UP11 era trecut de deadline de muuult) s\u0103 <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/en\/charset-connection.html\">RTFM<\/a>, am scanat prin el \u015fi am g\u0103sit c\u00e2teva linii relevante:<\/p>\n<blockquote>\n<pre class=\"programlisting\">SET NAMES '<em class=\"replaceable\"><code>charset_name<\/code><\/em>'\nSET CHARACTER SET <em class=\"replaceable\"><code>charset_name<\/code><\/em><\/pre>\n<\/blockquote>\n<p>Evident, nu trebuie s\u0103 uita\u0163i s\u0103 definiti character-encoding-ul \u00een HTML-ul rezultat \u015fi s\u0103 trimite\u0163i headerul HTTP cu character encodingul setat corect (desi browserele de doamne-ajut\u0103 fac ele detec\u0163ie).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I-am dat drumul. Adic\u0103 am trimis invita\u0163ia, am pus sus site-ul \u015fi informa\u0163iile existen\u0163iale, lucrurile se mi\u015fc\u0103 pe partea de logistic\u0103, lucrurile se mi\u015fc\u0103 pe partea de program, n-a\u015f \u00eendr\u0103zni s\u0103 zic c\u0103 ne merge super dar avem loc de mi\u015fcare. Site-ul \u00eel pute\u0163i vedea la http:\/\/www.unitatesiprietenie.ro\/, \u015fi este bazat pe yPHP. Tot setup-ul a &hellip; <a href=\"https:\/\/yeti.albascout.ro\/blog\/up11-site-rollin-on-yphp\/\" class=\"more-link\">Continu\u0103 s\u0103 cite\u0219ti <span class=\"screen-reader-text\">UP11 site rollin&#039; on yPHP<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[558],"tags":[682,717,725],"class_list":["post-89","post","type-post","status-publish","format-standard","hentry","category-gramada","tag-php","tag-up11","tag-yphp"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts\/89","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":0,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"wp:attachment":[{"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yeti.albascout.ro\/blog\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}