我正在学习curl从网站获取数据。除了特殊字符外,Curl的一切工作正常。当我查看网站的来源时,它有以下项目。
<li class="page_item page-item"><a href="../categories/mens-health/">Men’s Health</a></li>
<li class="page_item page-item"><a href="../categories/nails-hair-skin/">Nails, Hair & Skin</a></li>
<li class="page_item page-item"><a href="../categories/womens-health/">Women’s Health</a></li>
当我在数组中获取数据并在浏览器上回显时,我得到结果为
Men’s Health
Nails, Hair & Skin
Women’s Health
我通过执行以下代码获得
$search = array('’');
$replace = array("'");
$category_names[] = htmlentities(str_replace($search, $replace, $word), ENT_QUOTES);
$ word是上面的3个数组项。现在,我无法在插入数据库时将它们转换为正确的字符。这就是它在我的数据库中的显示方式
Men&#8217;s Health
Nails, Hair &#038; Skin
Women’s Health
如何以正确的格式插入如下?
男人的健康
指甲。头发&amp;皮肤
女性健康
我检查了一些有撇号的解决方案,但它们大多是单插入语句,而我在循环中插入。
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]);现在我在我的数据库中得到以下信息
男人的健康
钉子,头发&amp;皮肤
女性的健康
答案 0 :(得分:2)
html_entity_decode
将解码HTML实体,包括NCR。例如,’
将变为’
。
<?php
$in = 'Men’s Health
Nails, Hair & 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);
答案 1 :(得分:0)
可能是.html和.text函数可以帮助你 例如:
HTML
<div id="test"><<</div>
jquery的
var t = $('#test');
t.html(t.text());
可能这可以帮到你 js fiddle link
答案 2 :(得分:0)
某些字符在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 '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
"'" (single quote) becomes ''' (or ') only when ENT_QUOTES is set.
'<' (less than) becomes '<'
'>' (greater than) becomes '>'