문제

확인. 나는 간단한 (ISH) 기능을 작성하여 인수를 취하고 HTML 캐릭터가 캐릭터 엔티티로 대체 된 위험과 동일한 인수를 반환했습니다.

함수는 문자열, 배열 또는 2D 배열 인 인수로서 인수로 취할 수 있습니다. 3D 배열 이상은 지원되지 않습니다.

함수는 다음과 같습니다.

public function html_safe($input)
{   
    if(is_array($input)) //array was passed
    {
        $escaped_array = array();
        foreach($input as $in)
        {
            if(is_array($in)) //another array inside the initial array found
            {
                $inner_array = array();
                foreach($in as $i)
                {
                    $inner_array[] = htmlspecialchars($i);
                }
                $escaped_array[] = $inner_array;
            }
            else
                $escaped_array[] = htmlspecialchars($in);
        }
        return $escaped_array;
    }
    else // string
        return htmlspecialchars($input);
}

이 기능은 작동하지만 문제는 원래 배열의 배열 키를 유지해야한다는 것입니다.

이 기능의 목적은 문자 그대로 데이터베이스 쿼리에서 결과 세트를 전달하고 안전한 HTML 문자로 모든 값을 되 찾을 수 있도록하는 것이 었습니다. 따라서 분명히 배열의 키는 데이터베이스 필드의 이름이 될 것이며 현재 내 함수는 숫자 값으로 대체합니다.

그렇습니다. 배열 키가 아직 손상되지 않은 상태에서 동일한 인수를 기능으로 전달해야합니다 (배열이 전달 된 경우).

그것이 말이되기를 바랍니다. 제안은 감사했습니다.

도움이 되었습니까?

해결책

수많은 미루를 중첩하지 않고 재귀를 사용할 수 있습니다.

function html_safe($input) {
    if (is_array($input)) {
        return array_map('html_safe', $input);
    } else {
        return htmlspecialchars($input);
    }
}

다른 팁

알았어, 나는 이것을 스스로 알아 낸 것 같아 ...

내 Foreach 루프에는 예를 들어 다음과 같은 키가 지정되지 않았습니다.

foreach($array_val as $val)

대신에:

foreach($array_val as $key => $val)

이 경우 출력 Arrray에서 배열 키를 보존 할 수있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top