【问题标题】:MongoDb munging HTML entities like "®" into "®" on save() from PHPMongoDb 将 HTML 实体(如“®”)转换为“®”在 PHP 的 save() 上
【发布时间】:2012-08-09 20:50:09
【问题描述】:

在 MongoDb 2.0.6 上,在 64 位上运行,带有官方驱动程序的 PHP 5.4。

的MongoDb save()
® 

存储为

® 

Mongo 显然将所有 & 放入 & amp;从而在再次输出到浏览器时破坏 html 实体!存储“Bose®”工作正常,它存储为“Bose®”。这里发生了什么?我希望 MongoDb 停止更改我的数据。我故意存储 HTML 实体,如

® 

为了避免这样的问题,但是MongoDb把它变成了

&®

通过 PHP 保存()?这是错误还是“功能”?

目前,我必须在 save() 到 MongoDb 之前对我的所有字符串/数据执行 html_entity_decode()...

【问题讨论】:

  • 愿意分享您的 PHP 代码吗? 预设“MongoDB”导致了这个问题似乎有点冒昧

标签: html mongodb character html-entities


【解决方案1】:

MongoDB 以这种方式处理数据。您的应用程序中还有其他东西正在处理数据。

这是一个简单的测试程序:

<?php

$conn = new Mongo();
$db = $conn->test;
$collection = $db->tb;

$collection->drop();
$collection->save( array( 'name' => ">>&reg;<<" ) ) ; 
$cursor = $collection->find();

foreach ($cursor as $doc) 
    print(" {$doc['name']} \n");

?>

运行时会产生以下输出:

 >>&reg;<< 

显然,您的工具链中的其他东西正在执行 HTML 编码。

【讨论】:

  • 如果我没记错的话,MongoDb 本身就是 UTF-8。该问题可能是由源数据的混合编码引起的。因此,就此而言,MongoDb 不处理数据是对的,这是源数据编码的问题。
  • MongoDB 本机 UTF-8。 OP 提出了不同的声明:包含 HTML 实体的纯 ASCII 字符串正在被 HTML 编码。 MongoDB 确实NOT 这样做——问题显然出在他们代码的其他地方。
猜你喜欢
  • 2015-04-11
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2019-04-17
相关资源
最近更新 更多