繁体   English   中英

如何在php和sql中进行特殊字符转换?

[英]How can I do special characters conversion in php and sql?

我正在学习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

如何按以下正确格式插入它?
男性健康
指甲 头发和皮肤
女性健康

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

将带有'(撇号)的文本插入SQL表的方法
如何在SQL Server中转义单引号?

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

html_entity_decode将解码HTML实体,包括NCR 例如, &#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);

可能是.html和.text函数可以为您提供帮助,例如:

html

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

jQuery的

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

也许这可以帮助您js小提琴链接

某些字符在HTML中具有特殊意义,如果要保留其含义,则应由HTML实体表示。 该函数返回一个字符串,其中包含一些转换。 所做的翻译对于日常Web编程最有用。 如果您需要翻译所有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() (仅对具有命名实体的子字符串进行编码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;'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM