【问题标题】:Formatted text in posts like fb/orkutfb/orkut 等帖子中的格式化文本
【发布时间】:2013-11-26 22:23:54
【问题描述】:

我有一个网站正在开发中。我在我的帖子中尝试了以下格式,但它没有按原样显示。我在 facebook/orkut 中对其进行了测试,它按原样显示:

███─█─────█─███─███─███
█───█─────█─█───█────█
███─█──█──█─██──██───█
──█─█─█─█─█─█───█────█
███─██───██─███─███──█

███─███──███─███─██───█─███─
█───█─█───█──█───█─█──█─█──█
███─██────█──██──█──█─█─█──█
█───█─█───█──█───█───██─█──█
█───█──█─███─███─█────█─███─

但在我的页面中,当从数据库(MYSQL)检索时,它看起来如下:

███─█─────█─███─███─███
█───█─────█─█───█────█
███─█──█──█─██──██───█
──█─█─█─█─█─█───█────█
███─██───██─███─███──█

███─███──███─███─██───█─███─
█───█─█───█──█───█─█──█─█──█
███─██────█──██──█──█─█─█──█
█───█─█───█──█───█───██─█──█
█───█──█─███─███─█────█─███─

如果我使用 AJAX 预览它不存储在数据库中,它看起来完全一样。在存储到数据库之前,我使用了以下 PHP 函数:

    $content=$_POST['content'];
    $content = str_replace("<br/>","\n",$content);//br2nl
    $content=mysql_real_escape_string($content);

我应该怎么做才能像在 facebook 或 orkut 等中那样格式化文本? 在将文本发送到服务器之前,我还使用了 URL 编码:

var params = "content=" + encodeURIComponent(content);

【问题讨论】:

  • 这看起来像是一个编码问题。尝试编码为 UTF-8。
  • 在这里查看我的帖子:stackoverflow.com/questions/19702687/…
  • 您的问题与 URL 编码无关。这都是关于字符编码的。为了能够正确显示字符,请使用 UTF-8。它会工作的。看我的回答。
  • 谢谢@MarkusHofmann
  • @rosemary 不客气 :-) 如果我的回答有效,请接受我的回答,或者如果您需要进一步的帮助,请再次询问我。

标签: php mysql


【解决方案1】:

将字符集元标记添加到将显示特殊字符的html页面的标题部分:

<html>
  <head>
    <meta charset="utf-8">
    <title>...</title>
    ...

并在回显之前对帖子进行编码:

<?php
echo utf8_encode($postBody);

或者如果上述方法不起作用,请尝试:

echo html_entity_decode($postBody, ENT_QUOTES, 'UTF-8');

这应该可以解决问题。

但是,如果您将编码的字符存储在 db 中,建议设置数据库表字符集 (因此您可以在保存之前对它们进行编码,而不是在回显之后)

ALTER TABLE posts CHARACTER SET utf8 COLLATE utf8_general_ci;

如果您想设置从数据库发送数据和向数据库发送数据的默认字符集,请使用:

$mysqli->set_charset("utf8"); // Not available on Windows OS

【讨论】:

  • 非常感谢@Markus Hofmann,第二个对我来说很好用。如果是非 HTML5 浏览器,我应该使用 代替吗?在 之外?
  • 我会坚持使用 HTML5 标准,因为它是面向未来的,并且旧语法已过时,不再推荐。还要记住&lt;meta charset="utf-8"&gt; 元素必须在&lt;head&gt; 元素内并且在页面的前512 个字节内,因为某些浏览器在为页面选择字符集之前只查看这些第一个字节。有关浏览器兼容性和推荐用法的更多详细信息,请参阅 thisthis
  • 我忍不住再次感谢善良的心@Markus Hofmann 但是为了跨浏览器兼容性,我应该使用 作为旧浏览器的后备。我应该?
  • 您不必太担心浏览器的兼容性。坚持使用新的 HTML5 标准,因为这是未来的发展方向。浏览器marketshare统计数据显示,谷歌Chrome在竞争对手中脱颖而出,使用率最高,其次是IE9+和Firefox。您应该暂停对 IE7 及更低版本的支持。 IE8 仍在使用,但统计数据下降。因此,是否支持 IE8 取决于您(或您的客户)。所以:使用 HTML5,例如Modernizr.
  • 关于字符编码及其在数据库中的存储:尽可能纯地存储数据(这样您就可以随时更改数据的编码)。然后在页面上显示数据之前,使用上面的方法对其进行编码。为此最好使用 UTF-8。它可以表示 Unicode 字符集中的每个字符,并且向后兼容 ASCII (source)。如果您收到用户生成的数据,请确保在存储数据之前对数据进行清理(例如 HTML Purifier)以避免滥用。但是,没有什么是 100% 安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多