php urlencode和htmlspecialchars里面的一个变量在html 中启动了函数

问题描述 投票:2回答:1

我有这个功能:

function after_char($char, $var) {
    $get = explode($char, $var);
    $text= $get[1];
    echo $text;
}

我有html链接:

<a href="http://<?php after_char('@', urlencode($post_email)); ?>" target="_blank">Potwierdź aktywację konta w <?php after_char('@', htmlspecialchars($post_email, ENT_QUOTES)); ?>.</a> 

两个启动函数中的变量应该如何编码?我真的需要写第二个相同的功能吗?首先是urlencode,第二个是htmlspecialchars,并在函数内部编码而不是在启动函数内编码?

php function xss urlencode htmlspecialchars
1个回答
0
投票

你已经颠倒了操作的顺序。最好先在函数中准备数据,将其返回,然后对特定上下文进行编码并回显。

使用rawurlencode()编码将进入href=的URL。 使用htmlspecialchars编码HTML上下文中显示的任何其他文本。

例:

<?php

function after_char($char, $var): string {
    $get  = explode($char, $var, 2);
    return $get[1]; // returns the part after the $char
}

$result_of_after_char = after_char('@', $post_email);
?>
<a href="http://<?= urlencode($result_of_after_char); ?>" target="_blank"
    >Potwierdź aktywację konta w <?= htmlspecialchars($result_of_after_char , ENT_QUOTES); ?>.</a>

另一方面,函数after_char除了explode()之外没有做任何其他事情。你可以完全摆脱这个功能:

$result_of_after_char = explode('@', $post_email, 2)[1];
© www.soinside.com 2019 - 2024. All rights reserved.