我的语言文件包含网站内容的翻译 每种不同的语言都会加载不同的文件。
现在我希望有类似的内容,我需要在页面上回显并包含在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)
答案 0 :(得分: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 tools可以将_()函数包含的自然语言提取到单独的文件中进行翻译。翻译人员会使用poedit之类的标准工具来制作这些翻译。在运行时,您选择此文件的相应翻译版本,_()
将返回该翻译。