I wish you'd think about the bigger issue of autoloading functions,
which would solve this and many similar problems much more generally.

I mean, this:

<?html= $foo ?>

versus this:

<?= html($foo) ?>

What for?

I don't see the point in inventing new syntax, and introducing a new
concept, for what is effectively just a limited set of certain
specific functions.

We have functions already - rather than adding new features, we should
improve the features we already have instead, which benefits the
language as a whole, not just templates. Improving on functions is
long over due...


On Thu, Jun 30, 2016 at 9:52 PM, Thomas Bley <ma...@thomasbley.de> wrote:
> I would prefer to have ENT_HTML5 as the default flag included, since normally 
> all new html code is html5.
> Maybe split voting between <?~ and <?html= which gives a later option for 
> <?json=, <?csv and other contexts.
>
> Regards
> Thomas
>
> Михаил Востриков wrote on 30.06.2016 21:35:
>
>> I've tried to gather all arguments for and against.
>>
>> To be clear. I suggest new operator like '<?~ $value ?>' which is
>> equivalent of <?= htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE) ?>.
>> It is only for HTML context. Flag combination is taken from most popular
>> frameworks - Symfony, Zend, Yii, and Twig. Of course, exact form of
>> operator and default flags are the details of implementation.
>>
>>
>>
>> - You can write short function in userland.
>>
>> The problem is not that we have no function. The problem is that the same
>> action is always repeated, and if we don't repeat it then it leads to
>> security problems. More than 90% of output data - is data from DB and must
>> be HTML-encoded.
>>
>> There is no such problem with other contexts. If we don't call json_encode
>> when passing an array or object into javascript, this only breaks the
>> script, and it will be noticeable, there won't be security problems.
>>
>> With new operator we can write or <?~ ?>, or <?= ?>, they are mutually
>> exclusive, and we need specially write one or another, but with helper
>> function we have the same beginning <?= and then can write helper function
>> or not.
>>
>> Also there is a problem with function autoloading.
>>
>>
>>
>> - It is no place for such operators in the language.
>> It is no place for a such operators in C++, or C#, or Java. But in the most
>> popular language for web-programming it is very place for such operator.
>>
>>
>>
>> - There are many other contexts
>>
>> HTML is external context, but others are internal task-dependent contexts.
>> HTML can be used together with other contexts.
>> HTML context is the main context in every PHP file, and we write <?php at
>> the beginning to switch it.
>>
>> Actually, on web page we have 3 external contexts - HTML, &gt;script> tag,
>> <style> tag.
>> PHP+CSS usually is not used. PHP+JS is not just escaping. It is encoding in
>> special notation.
>> Escaping can be applied only to strings, but encoding can be applied to any
>> type of variables.
>>
>> Only urlencode is really escaping (and it also can be used together with
>> other contexts). But urlencode is an internal context. If we construct an
>> URL, e.g. for filters, we should encode every part.
>>
>> $filterUrl = '/my_route/?state=active';
>> if ($postData['contains_text']) $filterUrl .=
>> '&contains_text='.urlencode($postData['contains_text']);
>>
>> When we write data-attirbute, additional context is task-dependent, but
>> HTML context is always present.
>>
>> <div class="some-class"
>>    data-url="<?=
>> htmlspecialchars('/my_route/?state=active&category_id=123') ?>"
>>    data-settings="<?= htmlspecialchars(json_encode($settings) ?>"
>>></div>
>>
>>
>>
>> - Other people will ask about operator for another context
>> And you can say: We already added an operator for the main web context,
>> because it is the most frequently used context. If you have a lot of work
>> with other contexts, please use template engine.
>>
>>
>>
>> - You want to add new operator just for your needs
>> It's not only my needs for one project. I meet this problem in many
>> projects without template engine. The results of the poll, which I wrote
>> about in my previous message, show that it has a place not only for me.
>> Some feature requests on http://bugs.php.net with the same question were
>> created in 2002.
>>
>>
>>
>> - Some people can use various flags, or use third and fourth parameters of
>> htmlspecialchars().
>>
>> How many such projects of total number of projects?
>> Default flags can be set to be enough safe. Third parameter can be chaged
>> via ini_set. Fourth parameter is not required for many cases. Except maybe
>> when some people encode the data before saving it into database.
>> Also, new operator is not a replacement for htmlspecialchars, so it could
>> still be used.
>>
>> It just is looked not very good - we use special set of parameters, so you
>> cannot add operator which we could not use.
>>
>> This problem with flags can be solved by adding default value for them with
>> PHP_INI_USER mode, and getter and setter for it. But I'm not sure you think
>> this is a good idea.
>>
>>
>>
>> - Exact flags / Default flags
>>
>> In popular frameworks there are the following flags:
>>
>> Symfony — ENT_QUOTES | ENT_SUBSTITUTE
>> Yii — ENT_QUOTES | ENT_SUBSTITUTE
>> Zend — ENT_QUOTES | ENT_SUBSTITUTE
>> Twig — ENT_QUOTES | ENT_SUBSTITUTE
>>
>> https://github.com/symfony/symfony/blob/f29d46f29b91ea5c30699cf6bdb8e65545d1dd26/src/Symfony/Component/Templating/PhpEngine.php#L421
>> https://github.com/yiisoft/yii2/blob/c370c17e93f364a843ed7c31e1e1f7fc8caef0a3/framework/helpers/BaseHtml.php#L104
>> https://github.com/zendframework/zend-escaper/blob/1a855b5f7074607b1260d85c5526a59b1ab36593/src/Escaper.php#L117
>> https://github.com/twigphp/Twig/blob/f0a4fa678465491947554f6687c5fca5e482f8ec/lib/Twig/Extension/Core.php#L1039
>>
>>
>>
>> - Tilde sign
>> There is a good argument about tilde sign. It is absent in keyboard layouts
>> for some european languages. But it is the details of implementation.
>> I think it should be special sign which is typed with Shift and is located
>> rather far from "=" sign. Possible variants are "<?! ?>", "<?@ ?>", "<?^
>> ?>". First variant looks more suitable.
>>
>>
>>
>> I don't see any arguments, why other operators can be implemented but this
>> operator cannot.
>>
>> So, please tell me, what do you think about RFC?
>>
>>
>>
>> 2016-06-29 21:39 GMT+05:00 Михаил Востриков
>> <michael.vostri...@gmail.com>:
>>
>>> Hello. I've created an article on russian technical site habrahabr.ru.
>>> https://habrahabr.ru/post/304162/
>>>
>>> There is a poll about introducing of such operator. About 60% from those
>>> people who have projects without template engine are "for" this operator.
>>> And even a half of those who don't also think that such operator can be
>>> useful.
>>>
>>> I think you can use Google Translate to read it, common sense and code
>>> examples should be understandable.
>>>
>>> https://translate.google.com/translate?sl=en&tl=ru&js=y&prev=_t&hl=ru&ie=UTF-8&u=https%3A%2F%2Fhabrahabr.ru%2Fpost%2F304162%2F&edit-text=&act=url
>>>
>>> Current results:
>>>
>>>
>>> How often do you work with the projects with template rendering on PHP
>>> where template engines are not used?
>>> 35% (163)  Always
>>> 22% (104)  Quite often
>>> 18% (86)   Quite rare
>>> 25% (117)  Almost never
>>>
>>> Voted 470 people. Abstained 116 people.
>>>
>>>
>>> How do you think, such an operator would be useful?
>>> 56% (264)  Yes
>>> 44% (207)  No
>>>
>>> Voted 471 people. Abstained 121 people.
>>>
>>>
>>> I don't use PHP teplate rendering ...
>>> 51% (147)  and I think that such an operator is not needed
>>> 49% (139)  but I think that such an operator will come in handy
>>>
>>> Voted 286 people. Abstained 247 people.
>>>
>>>
>>> Screenshot in Russian:
>>>
>>> https://habrastorage.org/files/675/9ac/883/6759ac8834044ef0b5a09163c791f376.png
>>>
>>>
>>> 60% are "for" this operator, projects of others 40% will not be affected.
>>> I think this is a good reason to create an RFC and discuss it on more
>>> global level.
>>>
>>>
>>
>
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to