Есть ли какая-либо функция для определения фактической длины строки, возвращаемой функцией filter_var ()? - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь найти фактическую длину строки, возвращаемой функцией filter_var (), используя функции strlen () и mb_str ().

Код:

<?php
$name = "Carl O'Johnson";
echo "The actual length of the string: " . strlen($name) . "<br>";
$name = filter_var($name, FILTER_SANITIZE_STRING);
echo "The length of the string using strlen() after filter_var() function: " . strlen($name) . "<br>";
echo "The length of the string using mb_strlen() after filter_var() function: " . mb_strlen($name) . "<br>";
?>

Вывод:

Фактическая длина строки: 14 Длина строки с использованием функции strlen () после функции filter_var (): 18 Длина строки с использованием функции mb_strlen () после функции filter_var (): 18

Функция filter_var кодирует 'как # 39 ;. Какая функция вернет фактическую длину строки, возвращаемой функцией filter_var ()?

1 Ответ

0 голосов
/ 03 августа 2020

Вы либо хотите оставить кавычки в покое при дезинфекции строки (если вас это устраивает), установив параметр FILTER_FLAG_NO_ENCODE_QUOTES:

$name = filter_var($name, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
$length = mb_strlen($name);  // 14

Или вы можете преобразовать сгенерированные HTML сущности перед вычислением длины, используя html_entity_decode и передавая флаг ENT_QUOTES:

$name = filter_var($name, FILTER_SANITIZE_STRING);
$length = mb_strlen(html_entity_decode($name, ENT_QUOTES, 'UTF-8'));  // 14

Обратите внимание, что в этом случае strlen даст тот же результат.

...