我想知道在PHP中插入文本的方式是否比
更短<?php
$city = "London";
?>
This website is a funky guide to <?php print $city; ?>!!!
例如,在轨道上使用ruby,我可以设置
city = 'London'
在代码中的某个地方,在我的.erb文件中,我可以做到
This website is a funky guide to <%= city %>!!!
我确实读过{$city}
可以使用的某个地方,但我尝试过但事实并非如此。那么是否有比<?php print $var; ?>
更短的形式?
答案 0 :(得分:5)
您可以使用必须在您的配置中启用的short_open_tag
,但这不是一个好习惯,因为它只有在启用时才有效 - 并且它们并非总是(可能甚至没有默认情况下)
使用长标签和回显/打印可能会更长,是的......但我建议使用那些,而不是短标签。
另请注意,当数据来自不受信任的来源和/或可能包含您不希望在页面中注入的HTML时,您可能需要转义数据,以避免注入HTML / JS (请参阅htmlspecialchars):
在评论后编辑,添加关于short_open_tag
的一些内容:
为什么短开标签被认为是(至少是我^^)不良做法?
首先,经过一些检查后,默认情况下不会启用它们:
对于PHP 5.3:
squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-development
; short_open_tag
short_open_tag = Off
squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-production
; short_open_tag
short_open_tag = Off
默认情况下,在“development
”或“production
”设置中均已停用。
对于PHP 5.2.10 (最新版本的PHP 5.2):
squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-dist
short_open_tag = On
squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-recommended
; - short_open_tag = Off [Portability]
short_open_tag = Off
默认情况下在“recommended
”设置中停用
考虑到托管服务有时(通常是?)这些默认设置,依赖short_open_tag
被激活是危险的。
(我自己遇到了那些被禁用的人的问题......当你不是服务器的管理员并且没有必要的特权来修改它时,它并不好玩^^)
如果您想要一些数字,可以查看Quick survery: short_open_tag
support on or off by default?
(不是科学证据 - 但表明将它们用于您向公众发布的应用程序可能很危险)
就像你说的那样,那些在激活时会与XML声明冲突 - 意味着你必须使用这样的东西:
<?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?>
考虑到存在短暂打开的标签,并且可能会在您将使用的服务器上激活,但您可能不会使用<?xml
。太糟糕了: - (
实际上,阅读php.ini-recommended of PHP 5.2.10:
; Allow the <? tag. Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server. For portable, redistributable code,
; be sure not to use short tags.
来自PHP 6的那个更有趣:
; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
(在PHP 5.3中可能相同;没有检查)
可以从PHP 6中删除rumors个短开标记;考虑到我刚刚发布的php.ini部分,它可能不会......但是,仍然......
提出指向另一个方向的论据(毕竟我必须说实话):使用短开标签用于模板文件 (仅限)是经常出现的事情在Zend Framework的使用模板文件的示例中完成:
在我们的示例和文档中,我们 使用PHP短标签:
也就是说,很多开发者都喜欢 使用完整标签的目的 验证或可移植性。对于 例如,short_open_tag被禁用 在php.ini.recommended文件中,和 如果您在视图脚本中模板化XML, 短开标签会导致 模板验证失败。
(source)
相反,对于.php
个文件:
永远不允许使用短标签。对于 只包含PHP代码的文件 必须始终省略结束标记
(source)
我希望这些信息有用,并为您的评论带来某种答案: - )
答案 1 :(得分:2)
如果您退出PHP模式,那么打印变量的唯一方法是切换回它并像上面一样打印它。您可以保持PHP模式并使用您尝试的{}构造:
<?php
$city = "London";
echo "This website is a funky guide to {$city}!!!";
?>
答案 2 :(得分:1)
我确实读过可以使用{$ city}的地方
如果你选择Smarty之类的模板引擎,你可以这样做。如果您在团队中开发并且其中一些人不了解PHP,那么这可能很有用。
否则,假设您启用了短标记,您将得到以下最短信息:
<?=$city?>
如果你没有,或者你正在创建一个应用程序以重新分发给其他人,那么使用它:
<?php echo $city ?>
答案 3 :(得分:0)
只需扩展您的PHP块并执行此操作:
<?php
$city = 'London';
echo 'This website is a funky guide to ',$city,' !!!';
?>
或者,您可以使用“”代替''并将',$city,'
替换为$city
,但需要更多的CPU时间来解析变量。