解释 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 安全风格而非参数编码(例如,&
变为 &
,<
变为 $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'
);
我目前正在创建自定义 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 安全风格而非参数编码(例如,&
变为 &
,<
变为 $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'
);