我要編輯另一個在他的腳本中使用php短標籤的人的項目。我在我的服務器中禁用了短標籤。我認爲轉換所有的短標籤,而不是在我的服務器中啓用短標籤是更好的。如何將php短標籤轉換爲全長
所以哪個方向走的更好:
將所有短標籤?
在我的服務器中啓用短標籤?
如何我所有的短標籤轉換成全一個批次
我要編輯另一個在他的腳本中使用php短標籤的人的項目。我在我的服務器中禁用了短標籤。我認爲轉換所有的短標籤,而不是在我的服務器中啓用短標籤是更好的。如何將php短標籤轉換爲全長
所以哪個方向走的更好:
將所有短標籤?
在我的服務器中啓用短標籤?
如何我所有的短標籤轉換成全一個批次
轉換可以使用http://php.net/manual/en/function.token-get-all.php寫入。與find &替換不同,這不會影響XML聲明等。 轉換與啓用ST:這取決於。許多程序員可能更喜歡<?php到< ?,所以當你轉換時,你的代碼會更「標準」。但是,「標準」的重要性取決於具體情況。
您可以嘗試使用Eclipse PDT,使用它的搜索和替換所有的項目中(CTRL + H),以取代所有的短標籤與完整的標籤。
或任何其他好的IDE,比如NetBeans的運行它們。 – slikts 2010-09-01 06:45:48
更改服務器配置可能會更快。我個人不會去搜索和替換,因爲儘管我更喜歡使用普通標籤,但這只是一個品味問題。與XML聲明衝突的短標籤不是一個嚴重的問題,因爲您可以將聲明放在字符串中。
對於其他人,KoolKabin指的是使用的<?
代替<?php
作爲PHP代碼開始標記,通常是在此縮寫形式使用:
<?= $myvar1, $myvar2 ?>
即相當於此:
<? echo $myvar1, $myvar2 ?>
其本身相當於此,當服務器所以用short_open_tag的值爲配置=上在php.ini:
<?php echo $myvar1, $myvar2 ?>
就個人而言,我會轉換所有的短標籤,除非有許多頁面只有短標籤。
寫作各地token_get_all()一些代碼是你最安全的賭注(在這裏一個單獨的答案,我的細節),但你也許可以用一個簡單的脫身的sed腳本:
sed -e 's/<?\([ \t\r]\)/<?php\1/g' \
-e 's/<?$/<?php/g' \
-e 's/<?=\([ \t\r]\)\?/<?php echo \1/g'
只是提防您的代碼中的字符串(特別是正則表達式),其中可能包含<?
序列後跟空格字符。另請參閱:Useful one-line scripts for sed,其中指出sed語法各不相同,並且有些不支持\t
代碼(但您可以鍵入實際的製表符)。
n.b.要注意的是sed的不使用Perl的正則表達式和對方回覆的至少一個在這裏已經無效sed的語法:例如\?
在Perl是一種文字問號,但他打算?
,這是一個文字問號在sed的。 (他還用<?php
代替<?=
,錯誤地忽略了「回聲」。)
絕對地重新定位標籤。
如果你的代碼是在Unix/Linux/POSIX事遂所願:
find ${BASEDIR} -iname \*.php -exec rep_sht_tags.sh {} \;
其中rep_sht_tags.sh包含如下:
#!/bin/bash
destdir=`dirname $1`
mkdir -p /backup/${destdir}
cp $1 /backup/$1
sed 's/<\?=/<?php /' /backup/$1 >$1
(NB未測試)
我看了更多,我修改了我以前的答案:「絕對地轉換它」。下面的PHP-CLI轉換器很容易。確保運行此係統的系統配置爲short_open_tag=on
。
#!php-cli
<?php
global $argv;
$contents = file_get_contents($argv[1]) or die;
$tokens = token_get_all($contents);
$tokens[] = array(0x7E0F7E0F,"",-1);
foreach($tokens as $ix => $token) {
if(is_array($token)) {
list($toktype, $src) = $token;
if ($toktype == T_OPEN_TAG) {
if (($src == "<?") && ($tokens[$ix+1][0] != T_STRING)) {
$src = "<?php";
if ($tokens[$ix+1][0] != T_WHITESPACE) {
$src .= " ";
}
}
}
else if($toktype == T_OPEN_TAG_WITH_ECHO) {
$src = "<?php echo";
if($tokens[$ix+1][0] != T_WHITESPACE) {
$src .= " ";
}
}
print $src;
}
else {
print $token;
}
}
在我的博客上,我發佈了一個更完整的評論版本和一個選項來保留<?=標籤,只更改<?標籤: http://www.danielnorton.com/2010/09/1079/converter-to-replace-php-short-open-tags-shorttags-with-long-tags – danorton 2010-09-02 20:51:01
http://www.emurasoft.com/replall/detail.htm – 2010-09-01 06:55:38
只需啓用短標籤。爲什麼他們首先被禁用? – meagar 2010-09-02 20:56:13
和可能重複[批處理腳本<?來取代PHP短開放標籤的PHP(http://stackoverflow.com/q/684587/367456) – hakre 2013-03-31 17:09:24