【问题标题】:offset error in serialized string doesn't make sense序列化字符串中的偏移错误没有意义
【发布时间】:2016-11-11 12:00:20
【问题描述】:

所以当我尝试在 PHP 中序列化它时,这个字符串显示为 false。

我使用 2 个在线序列化网站。

第一个测试返回正常。就是这个网站:http://blog.tanist.co.uk/files/unserialize/

另一个网站显示了真正的问题。或者是吗?我很困惑。这是这个网站:https://www.functions-online.com/unserialize.html

我得到的第一个错误是“offset 1095 of 7441 bytes” 恰好在s:6:"filter"; 中的“t”处(位于 sn-p 的第 12 行)

我认为这意味着它出于某种原因将字符数读取为 4? 我尝试替换所有字符,包括引号以确保它们不是代表多个字节的字符的奇怪版本。那没有用。但是,如果我将“过滤器”更改为“过滤器”,它就起作用了。它移动到下一个偏移误差。

我在序列化之前尝试了很多对字符串的转换,我在网上找到了解决方案。

utf8_encode

base64_decode

他们都没有帮助。

这是字符串。 (直接从带有 utf8_general_ci 排序规则的 mysql 表中复制)

a:13:{i:3;a:4:{s:5:"title";s:16:"Regional Offices";s:4:"text";s:1025:"<p>
<a href="/who-we-are/structure/conferences/alaska/">Alaska Conference of the Evangelical Covenant Church</a><br />
<a href="/who-we-are/structure/conferences/canada/">Evangelical Covenant Church of Canada</a><br />
<a href="/who-we-are/structure/conferences/central/">Central Conference</a><br />
<a href="/who-we-are/structure/conferences/east-coast/">East Coast Conference</a><br />
<a href="/who-we-are/structure/conferences/great-lakes/">Great Lakes Conference</a><br />
<a href="/who-we-are/structure/conferences/midsouth/">Midsouth Conference</a><br />
<a href="/who-we-are/structure/conferences/midwest/">Midwest Conference</a><br />
<a href="/who-we-are/structure/conferences/northwest/">Northwest Conference</a><br />
<a href="/who-we-are/structure/conferences/north-pacific/">Pacific Northwest Conference</a><br />
<a href="/who-we-are/structure/conferences/pacific-southwest/">Pacific Southwest Conference</a><br />
<a href="/who-we-are/structure/conferences/southeast/">Southeast Conference</a></p>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:4;a:4:{s:5:"title";s:9:"Translate";s:4:"text";s:614:"<div id="google_translate_element"></div><script>
function googleTranslateElementInit() {
  new google.translate.TranslateElement({
    pageLanguage: 'en',
    gaTrack: true,
    gaId: 'UA-2683611-22',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE
  }, 'google_translate_element');
}
</script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

<p><span style="font-size:10px; line-height:11px"><br /><strong>Disclaimer</strong>: This translation may not be completely accurate as it is generated by a computer.</span><br />&nbsp;</p>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:5;a:4:{s:5:"title";s:10:"Contact Us";s:4:"text";s:920:"<p>The Evangelical Covenant Church<br />
8303 West Higgins Road<br />
Chicago, Illinois 60631<br />
<a href="http://www.covchurch.org/who-we-are/help/contact-us/">Contact us</a></p>

<h3>Stay Connected</h3>

<p><a href="http://www.facebook.com/covchurch" target="_blank"><img src="/wp-content/uploads/2013/07/ecc-facebook.png" width="35" /></a>&nbsp;&nbsp;<a href="http://www.twitter.com/cov_church" target="_blank"><img src="/wp-content/uploads/2013/07/ecc-twitter.png" width="35" /></a>&nbsp;&nbsp;<a href="http://www.instagram.com/cov_church" target="_blank"><img src="/wp-content/uploads/2013/07/ecc-instagram.png" width="35" /></a>&nbsp;&nbsp;<a href="http://www.covchurch.tv" target="_blank"><img src="/wp-content/uploads/2013/07/ecc-dottv.png" width="35" /></a>&nbsp;&nbsp;<a href="http://www.covchurch.org/subscribe" target="_blank"><img src="/wp-content/uploads/2013/07/ecc-rss.png" width="35" /></a></p>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:6;a:4:{s:5:"title";s:21:"Affiliated Ministries";s:4:"text";s:1093:"<p><a href="/affiliated/camps-retreat-center/">Camps and Retreat Centers</a><br />
<a href="http://www.chet.org/" target="_blank" title="CHET">CHET: Hispanic Theological Studies</a><br />
<a href="http://covcare.org/" target="_blank" title="CIC">Covenant Initiatives for Care</a><br />
<a href="http://www.covenantbenevolence.org/" target="_blank">Covenant Ministries of Benevolence</a><br />
<a href="/benefits/pension/">Covenant Pension Plan</a><br />
<a href="http://www.covenantretirement.org/" target="_blank">Covenant Retirement Communities</a><br />
<a href="http://www.covenanttrust.com/" target="_blank">Covenant Trust Company</a><br />
<a href="/affiliated/health-care-residences/">Health Care and Enabling Residences</a><br />
<a href="/ncp/">National Covenant Properties</a><br />
<a href="http://www.northpark.edu/Seminary.aspx" title="NPTS" target="_blank">North Park Theological Seminary</a><br />
<a href="http://www.northpark.edu" target="_blank" title="NPU">North Park University</a><br />
<a href="http://paulcarlson.org/">Paul Carlson Partnership</a><br />
</p>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:7;a:3:{s:5:"title";s:0:"";s:4:"text";s:128:"<br /><a href="http://covbooks.com" target="_blank"><img src="/wp-content/uploads/2012/01/covbooks-banner.jpg" border="0" /></a>";s:6:"filter";b:0;}i:8;a:3:{s:5:"title";s:9:"User Poll";s:4:"text";s:244:"<iframe style='width:245px; height:367px; overflow-x:hidden;' frameborder='0' name='proprofs' id='proprofs' src='http://www.proprofs.com/polls/widget/?title=whats-the-length-of-video-that-you-least-likely-to-load&theme=grey&width=237'></iframe>";s:6:"filter";b:0;}i:10;a:4:{s:5:"title";s:20:"Search CovChurch.org";s:4:"text";s:463:"<form action="http://www.covchurch.org/search-covchurch/" id="cse-search-box"><div><input type="hidden" name="cx" value="000453154239674603993:lmfbvipbnwq" /><input type="hidden" name="cof" value="FORID:11" /><input type="hidden" name="ie" value="UTF-8" /><input type="text" name="q" size="24" /><input type="submit" name="sa" value="Search" /></div></form><script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&lang=en"></script>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:11;a:4:{s:5:"title";s:20:"Search CovChurch.org";s:4:"text";s:505:"<form action="http://www.covchurch.org/search-covchurch/" id="cse-search-box">
  <div>
    <input type="hidden" name="cx" value="000453154239674603993:lmfbvipbnwq" />
    <input type="hidden" name="cof" value="FORID:11" />
    <input type="hidden" name="ie" value="UTF-8" />
    <input type="text" name="q" size="18" />
    <input type="submit" name="sa" value="Search" />
  </div>
</form>
<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&lang=en"></script>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:12;a:4:{s:5:"title";s:0:"";s:4:"text";s:128:"<br /><a href="http://covbooks.com" target="_blank"><img src="/wp-content/uploads/2012/01/covbooks-banner.jpg" border="0" /></a>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:13;a:4:{s:5:"title";s:0:"";s:4:"text";s:128:"<br /><a href="http://covbooks.com" target="_blank"><img src="/wp-content/uploads/2012/01/covbooks-banner.jpg" border="0" /></a>";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:14;a:4:{s:5:"title";s:0:"";s:4:"text";s:424:"<a class="twitter-timeline" href="https://twitter.com/Cov_Church" data-widget-id="347782163544031232">Tweets by @Cov_Church</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
";s:6:"filter";b:0;s:5:"class";s:1:"S";}i:15;a:4:{s:5:"title";s:9:"Translate";s:4:"text";s:678:"<div id="google_translate_element"></div><script type="text/javascript">
function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'en', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, multilanguagePage: true, gaTrack: true, gaId: 'UA-2683611-22'}, 'google_translate_element');
}
</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
<div style="margin-top: -15px;"><span style="font-size: 10px; line-height: 11px;">
<strong>Disclaimer</strong>: This translation may not be completely accurate as it is generated by a computer.</span>
</div>";s:6:"filter";b:0;s:5:"class";s:1:"S";}s:12:"_multiwidget";i:1;}

【问题讨论】:

  • 将结果粘贴到 Web 表单中可能会导致更改行尾(CR/LF 和 LF)、更改编码 (UTF-8 ANSI) 等问题。你是怎么得到那个序列化的字符串的?
  • @Igor(直接从带有 utf8_general_ci 排序规则的 mysql 表中复制)如上所述。

标签: php mysql serialization offset


【解决方案1】:

Error at offset 1095 of 7441 bytes 实际上是正确的。它的意思并不像你想象的那样。

从偏移量 62 开始。请注意,s:1025:" 开始一个从偏移量 70 开始的字符串,据称的长度为 1025,这意味着该字符串的结束引号应位于偏移量 1095 (70 + 1025)...但事实并非如此。

错误是“在”偏移量 1095,因为那里唯一可能的有效值是 "... 而这不是在那里找到的。它实际上早了 11 个字节,在偏移 1084 处。因此,这个错误是完全正确的,尽管乍一看有点违反直觉。

这是一个 -11 个字节的错误,奇怪/方便/不太令人惊讶的是,您会发现您的字符串中有 11 个换行符,这正好解释了如果 \r\n 仅替换为\r 或仅\n 可能仍然正确显示但不正确。

怎么会这样,你需要回溯调查,但错误是正确的;您有一个已损坏/损坏/不当操作且无法再解码的序列化值。

【讨论】:

  • 啊,所以据说 \r\n 换行符不见了?在 phpmyadmin 中直接读取 mysql 表通常会显示换行符吗?还是它们不可见?我正在尝试通过 PHP 输出提取数据。是否有 php 转换器功能来呈现这些缺失的换行符?在我序列化字符串之前?
  • (数据会被重新保存为新版本。所以不用担心旧字符串被破坏。只要我能修复它。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多