> What for?

<?html= $foo.$bar ?> is easy to verify

<?= html($foo).$bar ?> is not easy to verify

Regards

Rasmus Schultz wrote on 30.06.2016 22:27:

> 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