我有一个功能:
myfunc () {
$a = "John";
$str = "Hello $a, how are you today?"
return $str;
}
echo myfunc(); //Hello John, how are you today?
我想将该函数中的所有句子保存到另一个文件中,因为它们的长度太长而无法将其放入我的函数中。
myfunc () {
$a = "John";
$str = file_get_contents("inc_file.html");
return $str;
}
inc_file.html:
Hello $a, how are you today?
但它并没有像我预期的那样回归。变量$ a不会更改为John。 请帮我 ! 感谢
答案 0 :(得分:1)
行$str = file_get_contents("inc_file.html");
只需即可获取文件内容。 不评估此内容,不会将替换为<值。
假设,如果文件很大,将会发生一些关于php变量的特定文本会发生什么?
它们都应该用一些值替换?我想不是。所以,你只需要一个包含$a
等符号的字符串。
如果您必须替换字符串中的内容 - 请使用str_replace
,简单的代码是:
function myfunc () {
$a = "John";
$str = file_get_contents("inc_file.html");
return str_replace('$a', $a, $str);
}
答案 1 :(得分:1)
你有什么不错,你可以使用preg_replace_callback()
或在这种情况下str_replace()
做你想做的事。只需做一些调整:
<强> HTML:强>
"Hello ~val~, how are you today?"
<强> PHP 强>
function myfunc ($a)
{
$str = str_replace('~val~',$a,file_get_contents("inc_file.html"));
return $str;
}
echo myfunc('John');
简单preg_replace_callback()
示例:
function myfunc ($string,$a)
{
$str = preg_replace_callback('/(~[^~]{1,}~)/',function($v) use (&$a)
{
return array_shift($a);
},$string);
return $str;
}
$string = "hello my name is ~name~. I come from ~city~";
echo myfunc($string,array('John','San Francisco'));
答案 2 :(得分:1)
file_get_contents()
所做的就是返回文件的内容,正如函数名所示。它不会解析"
s中字符串所发生的内容。
在返回的文件内容上使用str_replace()
似乎达到了你想要的效果。
$str = file_get_contents("inc_file.html");
$str = str_replace('$a', 'John', $str);
return $str;
如果您想要替换多个变量&#39;您可以将数组传递给str_replace
,例如
$search = [$a, $b];
$replace = ['John', 'Brian'];
$str = file_get_contents("inc_file.html");
$str = str_replace($search, $replace, $str);
return $str;
答案 3 :(得分:0)
你可以包含.php文件,但机智.html是没有用的,因为你包含html而不是php代码。如果您创建代码和您的文件:
app:popupTheme="@style/AppTheme.PopupOverlay"
inc_file.php:
<?php
function myfunc()
{
$a = "John";
$str = file_get_contents("inc_file.php");
return $str;
}
?>
答案 4 :(得分:0)
这是一个替换加载文件字符串中任何匹配变量的方法。它是以下链接的修改版代码。我修改它以检查字符串类型。它假设变量是全局的。
How can I output this dynamic data without eval?
function interpolate( $string ){
foreach ($GLOBALS as $name => $value){
// avoid array to string and object conversion errors
if(is_string($value)){
$string = str_replace( '$'.$name, $value, $string );
}
}
$string = preg_replace( '/[$]\\w+/', '', $string );
return $string;
}
$emailTemplate = file_get_contents('inc_file.html');
$emailTemplate = interpolate($emailTemplate);
echo $emailTemplate;
我在找到一种没有eval()的方法后找到了这个,如下所示:
$emailTemplate = file_get_contents('inc_file.html');
$emailTemplate = htmlentities($emailTemplate);
eval("\$emailTemplate = \"$emailTemplate\";");
echo html_entity_decode($emailTemplate) ;