【问题标题】:meta description encoding - quotes returned as question marks PHP元描述编码 - 作为问号返回的引号 PHP
【发布时间】:2023-03-18 02:18:01
【问题描述】:

当我从该网站的元描述标签中检索引用时:http://mashable.com/2011/04/14/google-computers-regret/

“遗憾”一词周围的引号返回为问号。

我正在使用以下代码,而 $str 是返回的元数据:

if(mb_detect_encoding($str, 'UTF-8, ISO-8859-1', true) != 'ISO-8859-1') $str = utf8_decode($str); 
$str = strtr($str, get_html_translation_table(HTML_ENTITIES)); 
$str = strip_tags(html_entity_decode(htmlspecialchars_decode($str,  ENT_NOQUOTES), ENT_NOQUOTES, "UTF-8"));
$str = html_entity_decode($str, ENT_QUOTES,"UTF-8");

我该如何解决这个问题?

【问题讨论】:

  • 你想要完成什么?

标签: php encoding quotes meta utf


【解决方案1】:

将生成的 HTML 输出为 UTF-8。

【讨论】:

    【解决方案2】:

    这是一个原始的修复方法,我相信有更好的方法,但是:

    $str = str_replace( array( "“" , "”" ) , '"' , $str );
    

    这应该用简单的引号替换这些程式化的引号并防止问号问题。

    (很高兴学习比这个笨重的解决方案更好、更智能的解决方案。)

    根据以下评论修改:

    $str = str_replace( array("\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x98", "\xe2\x80\x99") , '"' , $str );
    

    您可以使用此函数用相同的替换 str 替换多个模式(保存在一个数组中) - 比用相同内容填充一个数组或在不需要时创建一个笨重的函数要好。

    【讨论】:

    • PHP 将那些“样式化”引号解释为我的常规引号,而不是进行替换
    • 我发现这些引号被称为“弯引号”,当然是微软带来的......这是一个替换它们的函数:function fixcurly($string) { $search = array("\xe2\x80\x9c", "\xe2\x80\x9d", "\xe2\x80\x98", "\xe2\x80\x99"); $replace = array('"', '"', "'", "'"); return str_replace($search, $replace, $string); }
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 2011-03-26
    • 2022-07-09
    相关资源
    最近更新 更多