PHP批量MD5哈希每行内容脚本结果异常求助
解决PHP批量MD5哈希计算结果不符的问题
嘿,我一眼就揪出问题根源了——那些看不见的**空白字符(换行、回车、空格)**在搞鬼!
你当前的脚本直接用explode(PHP_EOL, $value)拆分输入文本,但实际提交的内容里,每行末尾可能带有不同系统的换行符(比如Windows下的\r\n,而PHP_EOL在Linux环境是\n),或者不小心混入了空格、制表符。这些隐藏字符会被包含在$ids[$i]中,导致MD5计算结果和纯文本的预期值完全不符。
举个直观的例子:你输入的apples如果被拆分成了apples\r(带回车符),它的MD5就是你看到的265f78fc274d8428fd63dabc24400cb4,而纯apples的MD5才是预期的daeccf0ad3c1fc8c8015205c332f5b42。
下面是修正后的代码,我加了两个关键处理:
- 用
trim()清除每个元素前后的所有空白字符(包括换行、回车、空格、制表符) - 跳过空行,避免计算空字符串的MD5
<?php if(isset($_POST['btn'])){ $value = $_POST['text']; $ids = explode(PHP_EOL, $value); $content = ''; // 用foreach遍历更直观,也避免for循环重复计算数组长度的开销 foreach($ids as $id){ $cleanId = trim($id); // 只处理非空内容,跳过空行 if(!empty($cleanId)){ $content .= md5($cleanId) . '<br>'; } } echo nl2br($content); } ?>
用这个脚本测试你的输入:
apples
bananas
oranges
pineapples
得到的哈希值就会和你的预期完全一致:
daeccf0ad3c1fc8c8015205c332f5b42ec121ff80513ae58ed478d5c5787075b91b07b3169d8a7cb6de940142187c8df019b111ec0c13ed923922715bfb1670a
另外,处理50000+行的话,foreach比for循环配合count()更高效,后者每次循环都会重新计算数组长度,这点在大数据量下的性能差异会更明显。
内容的提问来源于stack exchange,提问作者Ryan Thames
相关产品推荐
相关产品推荐

