解释 GET 表单提交中的瑞典字母 (å, ä, ö)

Interpreting Swedish letters (å, ä, ö) in a GET form submission

我目前正在创建自定义 WordPress 主题。几个存档页面将包含隐藏的表格(由图片表示)。这些形式中的每一个代表一个post。当用户点击表单时,一个 GET 请求是 运行 并且浏览器检索特定 post.

的内容

每个隐藏表单都将 post 的标题作为值(作为这样的查询字符串:/lokaler/?lokal=Studion('Studion' 是标题,'lokaler' 是 post 类型))。这很好用,我得到了所需的信息,没问题。

当我想对包含 Ä 的标题执行相同操作时,问题就出现了。查询 /lokaler/?lokal=Sammanträdesrummet(显然)不起作用,但我似乎找不到解决方法...我正在使用 JavaScript 和 PHP 的组合在此页面上。

我怎样才能解决这个问题,以便 GET 请求有效,但我不必更改 post 的标题?

//how the form is created:

 <form method="GET" id="lokal_<?php echo get_the_title(); ?>" class="single_lokal_container single_lokal_lokal">
   <input type="hidden" name="lokal" value="<?php echo get_the_title(); ?>">

   etc...


//how post is queried
$current_lokal_from_uri = htmlspecialchars($_GET['lokal']);

            $args3 = array(
                'name'          =>      $current_lokal_from_uri,
                'post_type'     =>      'lokaler'
            );

您应该能够通过 GET 参数很好地传递这些。请确保编码和解码一致:

var plain = 'åäö';
var urlencoded = encodeURIComponent(plain);
var unencoded = decodeURIComponent(urlencoded);

console.log('plain', plain);// plain åäö 
console.log('urlencoded', urlencoded);// urlencoded %C3%A5%C3%A4%C3%B6 
console.log('unencoded', unencoded);// unencoded åäö
echo urldecode('%C3%A5%C3%A4%C3%B6'); // åäö

请记住,HTMLSpecialChars 用于将字符编码为 html 安全风格而非参数编码(例如,& 变为 &amp;< 变为 $lt;)

我已经解决了问题。

我对表单的值使用了 urlencode 和 decode。下一个问题是在尝试从解码值中生成 wp_query 时出现的。最后,这是一个简单的修复:我必须用 a:

替换解码值中的 ä

            $current_lokal_from_uri_decoded = urldecode($current_lokal_from_uri);      

            if(strpos($current_lokal_from_uri_decoded, 'ä') !== false) {
                $current_lokal_from_uri_decoded = str_replace('ä', 'a', $current_lokal_from_uri_decoded);
            } 

            $args3 = array(
                'name'          =>      $current_lokal_from_uri_decoded,
                'post_type'     =>      'lokaler'
            );