1

我有网站内容翻译的语言文件。
每种不同的语言将加载不同的文件。

现在我想要这样的东西,我需要在页面上回显并包含在form提交时发送的电子邮件中:

$lang["booking_mail_header"]='Dear '.$first_name.', thank you for your contact!';

这里的问题是在定义$lang[]之前加载并且是用户输入的内容,因此不安全。$first_name$first_name

我考虑过使用eval(),然后再考虑并没有。还有其他方法吗?

脚本这一点中的变量已经通过了这个正则表达式检查:
preg_match('/^[a-öA-Ö0-9-. ]*$/', $first_name)

4

1 回答 1

4

你可以把它做成一个模板,例如

$lang["booking_mail_header"]='Dear %s, thank you for your contact!';

然后将其与sprintf一起使用

$msg=sprintf($lang["booking_mail_header"], $first_name);

您还可以变得更聪明,并使用编号参数,这将允许您的模板重新排序 sprintf 的输入,例如

  $lang["format_name"]='%2$s, %1$s';

  $msg=sprintf($lang["format_name"], $first_name, $last_name);

一旦您理解了这一点,请考虑使用gettext,它使用相同的基本思想,但将其封装在一些标准工具中,这有助于维护您的翻译。使用它,您不会将翻译保存在数组中,您只需将自然语言包装在 _() 包装器中,例如

$msg=sprintf(_('Dear %1$s, thank you for your contact!'), $first_name);

gettext 工具可以将_()函数包裹的自然语言提取到单独的文件中进行翻译。翻译人员会使用像poedit这样的标准工具来生成这些翻译。在运行时,您选择此文件的适当翻译版本,_()并将返回该翻译。

于 2013-08-15T22:58:02.700 回答