当看框架源码时(例:ci)
遇到其中不懂的写法身边又没有牛人指点该怎么办?
就如下边这段代码:当strtolower($charset) != 'utf-8'时是一种处理,非而是另一种处理为什么那?像这样的问题如果到论坛里去咨询别人可能要等半天才能解决,如果搜索查找的话像这样的问题又没法下手。苦恼中..... 我该怎么办呢? 希望大家给予指点笔人感激不尽。
public function entity_decode($str, $charset='UTF-8')
{
if (stristr($str, '&') === FALSE) return $str; // The reason we are not using html_entity_decode() by itself is because
// while it is not technically correct to leave out the semicolon
// at the end of an entity most browsers will still interpret the entity
// correctly. html_entity_decode() does not convert entities without
// semicolons, so we are left with our own little solution here. Bummer. if (function_exists('html_entity_decode') &&
(strtolower($charset) != 'utf-8'))
{
$str = html_entity_decode($str, ENT_COMPAT, $charset);
$str = preg_replace('~&#x(0*[0-9a-f]{2,5})~ei', 'chr(hexdec("\\1"))', $str);
return preg_replace('~&#([0-9]{2,4})~e', 'chr(\\1)', $str);
} // Numeric Entities
$str = preg_replace('~&#x(0*[0-9a-f]{2,5});{0,1}~ei', 'chr(hexdec("\\1"))', $str);
$str = preg_replace('~&#([0-9]{2,4});{0,1}~e', 'chr(\\1)', $str); // Literal Entities - Slightly slow so we do another check
if (stristr($str, '&') === FALSE)
{
$str = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES)));
} return $str;
}
遇到其中不懂的写法身边又没有牛人指点该怎么办?
就如下边这段代码:当strtolower($charset) != 'utf-8'时是一种处理,非而是另一种处理为什么那?像这样的问题如果到论坛里去咨询别人可能要等半天才能解决,如果搜索查找的话像这样的问题又没法下手。苦恼中..... 我该怎么办呢? 希望大家给予指点笔人感激不尽。
public function entity_decode($str, $charset='UTF-8')
{
if (stristr($str, '&') === FALSE) return $str; // The reason we are not using html_entity_decode() by itself is because
// while it is not technically correct to leave out the semicolon
// at the end of an entity most browsers will still interpret the entity
// correctly. html_entity_decode() does not convert entities without
// semicolons, so we are left with our own little solution here. Bummer. if (function_exists('html_entity_decode') &&
(strtolower($charset) != 'utf-8'))
{
$str = html_entity_decode($str, ENT_COMPAT, $charset);
$str = preg_replace('~&#x(0*[0-9a-f]{2,5})~ei', 'chr(hexdec("\\1"))', $str);
return preg_replace('~&#([0-9]{2,4})~e', 'chr(\\1)', $str);
} // Numeric Entities
$str = preg_replace('~&#x(0*[0-9a-f]{2,5});{0,1}~ei', 'chr(hexdec("\\1"))', $str);
$str = preg_replace('~&#([0-9]{2,4});{0,1}~e', 'chr(\\1)', $str); // Literal Entities - Slightly slow so we do another check
if (stristr($str, '&') === FALSE)
{
$str = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES)));
} return $str;
}
解决方案 »
- 求高手帮忙我想写一个封装memcache类 并且把其他的get方法和set方法重写
- 请教一个PHP中嵌入flash播放器问题?
- PHP+MYSQL+FLEX+XML
- 求一个最新的百度收录查询系统PHP版的
- 哪位好心人帮我看看 这个段代码里面的错误在哪里 还有就是 ftp_put函数当中的$upfile_name和$upfile是之前已经定义好的还是当时定义啊?
- php实现@好友功能
- phpcms v9游客发布老是提示 会话已过期,请重新登录
- 注册用户时,email老是验证不过去,函数失效?
- 有对ecshop写法熟悉的吗
- PHP 2019 趋势如何?
- 接了个做站任务的面谈,不知道见面的时候带什么东西啊?
- 都说php采集很耗费服务器资源,哪个过程最耗服务器资源呢?
echo entity_decode('叶','utf-8');
echo "\n";
echo html_entity_decode('叶',ENT_COMPAT,'utf-8');叶 是 "叶"字.所以,我觉得他把
&& (strtolower($charset) != 'utf-8')
这部分从条件里拿掉更好一点,换句话说,能用html_entity_decode就先用,然后再处理无分号结尾的.因为你只问了这个utf8的问题,相信你别的部分都没啥问题,我也就不多嘴了.看别人的代码,可以细看,也可以粗看,
比如这个函数,如果你更关心其它地方,只要知道它是html_entity_decode一个变形版就行.
public function entity_decode($str, $charset='UTF-8')
{
if (stristr($str, '&') === FALSE) return $str; // 如果没能&,直接返回 // The reason we are not using html_entity_decode() by itself is because
// while it is not technically correct to leave out the semicolon
// at the end of an entity most browsers will still interpret the entity
// correctly. html_entity_decode() does not convert entities without
// semicolons, so we are left with our own little solution here. Bummer.
// 为什么不直接用html_entity_decode() , 因为 html_entity_decode()不直接转换不带分号的实体。 if (function_exists('html_entity_decode') &&
(strtolower($charset) != 'utf-8'))
{// 如果不是utf8; $str = html_entity_decode($str, ENT_COMPAT, $charset); //根据编码解码
$str = preg_replace('~&#x(0*[0-9a-f]{2,5})~ei', 'chr(hexdec("\\1"))', $str); //替换
return preg_replace('~&#([0-9]{2,4})~e', 'chr(\\1)', $str); //替换返回
}
// 如果是utf8;
// Numeric Entities 如果有数字实体则替换
$str = preg_replace('~&#x(0*[0-9a-f]{2,5});{0,1}~ei', 'chr(hexdec("\\1"))', $str);
$str = preg_replace('~&#([0-9]{2,4});{0,1}~e', 'chr(\\1)', $str);
// 字面量实体
// Literal Entities - Slightly slow so we do another check
if (stristr($str, '&') === FALSE)
{
$str = strtr($str, array_flip(get_html_translation_table(HTML_ENTITIES)));
} return $str;
}具体细看吧!该函数可以看出,实体有编码之分。 而utf-8可能是一较特殊的或国际通用标准的实体。
二,实体有数字式的,或字面量式的。 浏览器都认。
三,各种实体的编码和解码函数是有区别的,用什么编码实体,就用相应的解码函数。