【问题标题】:How can I do special characters conversion in php and sql?如何在 php 和 sql 中进行特殊字符转换?
【发布时间】:2015-10-01 04:55:26
【问题描述】:

我正在学习 curl 从网站获取数据。除了特殊字符外,Curl 一切正常。当我查看网站的来源时,它有以下项目。

<li class="page_item page-item"><a href="../categories/mens-health/">Men&#8217;s Health</a></li>
<li class="page_item page-item"><a href="../categories/nails-hair-skin/">Nails, Hair &#038; Skin</a></li>
<li class="page_item page-item"><a href="../categories/womens-health/">Women’s Health</a></li>  

当我得到数组中的数据并在浏览器上回显它时,我得到的结果是

Men&#8217;s Health  
Nails, Hair &#038; Skin  
Women’s Health

我通过执行以下代码得到的

$search = array('&#146;');
$replace = array("'");  
$category_names[] = htmlentities(str_replace($search, $replace, $word), ENT_QUOTES);

$word 是上面的 3 个数组项。现在我无法在插入数据库时​​将它们转换为正确的字符。这就是它在我的数据库中的显示方式

Men&amp;#8217;s Health
Nails, Hair &amp;#038; Skin
Women&rsquo;s Health

如何以如下正确格式插入它?
男性健康
钉子。头发和皮肤
女性健康

我检查了一些带有撇号的解决方案,但它们大多是单个插入语句,因为我在循环中插入。

Way to insert text having ' (apostrophe) into a SQL table
How do I escape a single quote in SQL Server?

我做了 html_entity_decode($category_names[$i]);现在我在我的数据库中得到以下结果
男性健康
指甲、头发和皮肤
女性健康

【问题讨论】:

  • @Kita 我使用了 html 实体,如我的问题 htmlentities(str_replace($search, $replace, $word), ENT_QUOTES); .这就是你想告诉我的吗??你能详细说明一下吗
  • @Shilekha html_entity_decodehtmlentities 相反。我已经详细说明了我的回答。

标签: php html mysql sql-server curl


【解决方案1】:

html_entity_decode 将解码 HTML 实体,包括 NCRs。例如,&amp;#8217; 将变为

<?php
$in = 'Men&#8217;s Health  
Nails, Hair &#038; Skin  
Women’s Health';

echo html_entity_decode($in);

将打印

Men’s Health  
Nails, Hair & Skin  
Women’s Health

上面的代码托管在这里:http://ideone.com/1rWL45

编辑

您的数据库表可能在 Latin1 中,并且在其中插入 Unicode(例如)字符会导致这样的错位字符。 简单地将几个 Unicode 字符替换为 ASCII 可能会缓解您的编码问题的某些部分。不过,我建议将表格的字符集更改为 UTF-8。

<?php

$map = [ '’' => "'", "..." => "..." ]; // from->to pairs
$normalized = str_replace(array_keys($map), array_values($map), $string);

【讨论】:

  • 谢谢,修复了 & 符号。所以现在我的数据库有 Men’s Health Nails, Hair & Skin Women’s Health 条目
  • @Shrilekha DB 中的字符损坏通常是由字符编码设置引起的。查看您的 PHP 和 DB 是否都使用 UTF-8。否则(这有点超出问题的范围)尝试让它们使用相同的字符集。
  • 好的,我会检查一下,找出真正的问题。
  • 这是一个关于你的问题的答案stackoverflow.com/a/3854705/760211
  • 我做了您在此处提供的链接中提到的内容。我的字符集实际上是 latin-1。因此,我按照 Ashley Wlliams 的帖子中的指导将其更改为 utf8。问题似乎仍然存在。所以我可能会继续寻找其他方法。但感谢您的快速回复。
【解决方案2】:

某些字符在 HTML 中具有特殊意义,如果要保留其含义,则应由 HTML 实体表示。该函数返回一个字符串,其中包含一些转换;所做的翻译是那些对日常网络编程最有用的。如果您需要翻译所有 HTML 字符实体,请改用 htmlentities()

htmlspecialchars — 将特殊字符转换为 HTML 实体

string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

如果传递给此函数的输入字符串和最终文档共享相同的字符集,则此函数足以准备输入以包含在 HTML 文档的大多数上下文中。但是,如果输入可以表示最终文档字符集中未编码的字符,并且您希望保留这些字符(作为数字或命名实体),则此函数和 htmlentities()(仅编码具有命名实体的子字符串等价物)可能是不够的。您可能必须改用mb_encode_numericentity()

执行的翻译是:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
"'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'

【讨论】:

  • 嗨,你确定它是字符串 htmlspecialchars 吗?当我收到错误解析错误:语法错误,第 54 行 ../fetch.php 中的意外 'htmlspecialchars' (T_STRING)
  • 请提供您编写此代码的位置以及如何编写代码?
【解决方案3】:

可能是 .html 和 .text 函数可以帮助你 例如:

html

<div id="test">&lt;&lt;</div>

jquery

var t = $('#test');
t.html(t.text());

也许这可以帮助你 js fiddle link

【讨论】:

  • 我没用过js fiddle。但如果我找不到解决方案,我会试一试。
猜你喜欢
  • 1970-01-01
  • 2012-09-02
  • 2012-07-10
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
相关资源
最近更新 更多