此问题已在此处有答案:
How to modify an array's values by a foreach loop? [duplicate](2个答案)
Why can't I update data in an array with foreach loop? [duplicate](3个答案)
PHP foreach change array value [duplicate](2个答案)
Modify array values in foreach loop [duplicate](2个答案)
Array of associative arrays, add new elements to the associative arrays [duplicate](8个回答)
2天前关闭。
我正在做一些安全方面的工作,php给了我一些奇怪的行为。你能帮我搞清楚到底是怎么回事吗?:)
我有一个输入数组,像这样
$first_name = "<script>alert();</script>";
$middle_name = 'Robert';
$last_name = 'Smith';
$username = 'testusername1';
$email = "testemail@mail.com";
$password = 'banana1';
我正在测试它们的XSS,使用htmlspecialchars,像这样。
$first_name = htmlspecialchars($first_name, ENT_QUOTES, 'UTF-8');
它可以很好地阻止$first_name中的脚本运行。
但是,将此代码粘贴到foreach循环中,javascript警报就会运行。
下面是我当前的foreach循环(不能正常工作)
$strings =
array($first_name,$middle_name,$last_name,$username,$email,$password);
foreach($strings as $string) {
$string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
}
我不知道我错过了什么。我猜这和将转换后的字符串赋值回数组有关?但这听起来很困惑,感觉不是正确的答案。idk
谢谢你的帮助。
安德鲁
6条答案
按热度按时间jjhzyzn01#
看起来你正在尝试通过引用创建一个foreach循环,你需要一个
&
来使你的foreach数据更改在该循环之外持久化...foreach($strings as $string) {
应为:
foreach($strings as &$string) {
正如@CBroe所指出的,我们必须使用
unset
来释放foreach循环中使用的变量...因此,您的完整解决方案将成为:qcbq4gxm2#
不能像这样重新分配数组元素。您需要使用元素的索引来执行此操作。
oyt4ldly3#
您可以在不使用引用的情况下使用以下方法:
goucqfw64#
foreach中有一个问题,可能htmlspecialchars函数将正确运行。请查看以下文章。
5vf7fwbs5#
foreach在数组的副本上工作,没有任何更改将持久化。
4sup72z86#
参加聚会有点晚了;但是,我想最简单的方法是使用array_map,这样就不需要执行
foreach
循环了。因此,整个代码看起来如下所示: