【问题标题】:Converting UTF-8 Characters in urls for SQL Query in PHP在 PHP 中为 SQL 查询转换 URL 中的 UTF-8 字符
【发布时间】:2012-11-27 18:14:28
【问题描述】:

我在 Wordpress 博客上运行 SQL 查询以获取帖子的 json 提要。这是我的代码:http://pastebin.com/jvaM9ySr

它工作正常,但有些帖子网址带有我认为是 UTF-8 特殊字符的内容,例如

ranking-of-the-country%e2%80%99s-101-best-desserts

我猜是一个博客编辑贴了一个花哨的撇号。

其他示例在网址中间有 %e2%84%a2 用于商标符号,甚至 %cf%83 用于希腊 sigma 字母。

我想转换这些以显示 json 提要中的实际特殊字符。

我将其用于match the urls in the Google Analytics API,并且相应的 Analytics url 包含特殊字符本身,而不是如下代码:

 ranking-of-the-country’s-101-best-desserts

因此,由于这个特殊字符问题,这几个案例不匹配。

我尝试在 pastebin 中的代码的各个位置使用 utf8_encode 和 utf8_decode,但没有成功。

有人有什么想法吗?谢谢!

【问题讨论】:

    标签: php wordpress utf-8


    【解决方案1】:

    我在其他编程语言中遇到过和你类似的问题。

    这不是utf8 encode,而是url encode

    尝试使用:

    urlencode(string)
    

    urldecode(string)
    

    在 2 种情况下(使用正确的 utf 字符解码所有 %char 更改)。

    您可以在此处找到更多信息和示例:http://php.net/manual/en/function.urlencode.php

    更新: 对于您的代码:我没有测试过,但是当您在此处存储响应值时,您必须或解码 url

        while($r = mysql_fetch_assoc($sth)) {
        if $r is a url
        $rows = decode($r);
        else
        $rows[] = $r;   
        }
    

    或 区分代码末尾的打印(类似于之前的代码):为数组中的每个变量进行适当的打印(并且当您“捕获”“url”时进行解码),在这里:

    print strip_tags(json_encode($rows));
    

    【讨论】:

    • echo urldecode("ranking-of-the-country%e2%80%99s-101-best-desserts"); 完美运行!谢谢!
    • 您介意看看我的code 并告诉我您认为urldecode(); 应该去哪里吗?我尝试的任何地方要么将 json 提要变为 NULL,要么根本不做任何事情。
    • 我不是 100% 确定为什么,但看起来这对我有用! print strip_tags(rawurldecode(json_encode($rows)))
    【解决方案2】:

    你只需要

    $text = "ranking-of-the-country%e2%80%99s-101-best-desserts";
    echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
    

    【讨论】:

    • 嘿,谢谢你的回答,但我认为这不会奏效。当我将您的两行放入 sandbox.onlinephpfunctions.com 时,它只会回显原始字符串?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2011-12-08
    相关资源
    最近更新 更多