PHPのfile_get_contents()
の出力をJavaScriptに渡して、その長さを計算したいとします。すべてOKですが、変数を渡すとJavaScriptがHTMLコードとして評価されるので、PHPのjson_encode()
を使用して "正常"にする必要がありますが、JavaScriptの文字列の長さはPHPの文字列の長さとは異なります。 JSのJSON.parse()
を使用しても、HTMLコードが解釈されるので役立たない。どのように私は同じ評価されたデータの長さを達成することができますか?PHPの `file_get_contents()`出力がJavaScriptに渡され、長さが計算されます
EDIT:基本的には、タグや特殊文字を含むページソース内のすべての文字をカウントする必要があります。私はPHPのstrlen($url_data)
のようなJSで計算された同じ出力を持っている。
EDIT 2:$url_data
でbin2hex()
を実行した後、JSで再変換して長さを確認しました。それは信頼できるでしょうか?ここで
<?php
ini_set('display_erros', -1);
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['urlinput']) && !filter_var($_POST['urlinput'], FILTER_VALIDATE_URL) === false) {
$url = filter_var($_POST['urlinput'], FILTER_SANITIZE_URL);
$url_data = @file_get_contents($url);
$js_url_data = json_encode($url_data);
//$url_src = htmlspecialchars($url, ENT_IGNORE);
$url_data_len = mb_strlen($url_data);
$url_src = strip_tags($url_data);
echo '<ul id="resultList">';
echo "<li>The following page contains " . $url_data_len . " characters</li>";
echo "<li>Page URL: " . $_POST['urlinput'] . "</li>";
echo "<li>Page title: " . page_title($url_data) . "</li>";
echo "<li>Protocol: " . parse_url($url, PHP_URL_SCHEME) . "</li>";
echo "<li>Host: " . parse_url($url, PHP_URL_HOST) . "</li>";
echo "</ul>";
//var_dump($url_src);
} else {
$error = "URL is not valid!";
}
}
function page_title($str) {
$matches = array();
if (preg_match('/<title>(.*?)<\/title>/i', $str, $matches)) {
return $matches[1];
}
else {
return null;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHP file_get_contents()</title>
</head>
<body>
<div class="url_class">
<form id="getsrc" method="post">
<input style="width: 300px;" type="text" name="urlinput" id="urlinput" placeholder="URL">
<input type="submit" name="submit" value="Get SRC">
</form>
</div>
<textarea rows="20" cols="50">
<?php
if (!empty($url_src)) {
echo $url_src;
}
?>
</textarea>
<?php echo '<br><span style="color:red">' . $error . '<span>'; ?>
<?php
if (!empty($js_url_data)) {
$script = <<<EOT
<script>
var url_data = $js_url_data;
var node = document.createElement("li");
var textnode = document.createTextNode("JavaScript page characters: " + url_data.length);
node.appendChild(textnode);
document.getElementById("resultList").appendChild(node);
</script>
EOT;
echo $script;
}
?>
</body>
</html>
json_encode()はPHP配列またはオブジェクト構造を符号化するように設計されているが、XML/HTMLの操作を行わないよう... –
Iは知っているが、「消毒」のHTMLデータを渡すために他の方法を考えることができませんでしたjavaScriptへ。何か案が? – bsteo
サニタイズされていることを意味しますか:エスケープまたはエンコードされたHTMLタグですか? htmlタグは合計文字列の長さに対して計算する必要がありますか?あなたが達成したいものは私にとってはあまり明確ではないかもしれませんが、近似解答を得るでしょう...あなたが目標を示している例を追加すればもっと多くのことができると思います:) –