我是php的新手,无法找到我的问题的答案。
我尝试从网址回显一个带有特殊字符的字符串(即à
,é
)。
网址字符串:
preview.php?content=<p>blà é bla</p>
预期的回音结果:blà é bla
所以我这样做:
$cont = $_GET['content'];
echo $cont;
结果:
bl
所以,即使我的网页有<meta charset="UTF-8">
,我也试过了:
$cont = $_GET['content'];
$cont = html_entity_decode($cont, ENT_COMPAT, 'UTF-8');
echo $cont;
相同的结果:
bl
我尝试在页面顶部使用标题(header('Content-Type: text/html; charset=UTF-8');
),结果相同。
奇怪的是,我试着这样做:
echo html_entity_decode("<p>blà é bla</p>");
甚至是这样:
echo "<p>blà é bla</p>";
我得到了预期的结果:
blà é bla
所以,我不认为这是一个字符集问题,但不能理解为什么它与文字字符串一起使用而不是get变量,有人可以帮助我吗?
答案 0 :(得分:1)
使用以下网址对您的网址进行编码:urlencode
和htmlentities
:
$url = 'content=' . urlencode('content=<p>blà é bla</p>');
echo '<a href="preview.php?' . htmlentities($url) . '">';
答案 1 :(得分:1)
@JustOnUnderMillions,是正确的。
例如:
如果您尝试访问来自网址的数据,例如
var AWS = require("aws-sdk");
var docClient = new AWS.DynamoDB.DocumentClient();
console.time("user get");
var params = {
TableName : 'User',
Key: {
"id": "2f34rf23-4523452-345234"
}
};
docClient.get(params, function(err, data) {
if (err) {
callback(err);
}
else {
console.timeEnd("user get");
}
});
但是当您通过编码
等数据传递数据时http://localhost/index.php?content=%3Cp%3Eblà%20é%20bla%3C/p%3E
echo $_GET['content'];
OUTPUT: bl
最好在URL中使用urlecode函数来编码数据。
答案 2 :(得分:0)
谢谢大家。
这完美无缺!
Actualy,因为我的网址是使用javascript生成的,所以我在链接的href变量上做了encodeURIComponent
,它也可以。
答案 3 :(得分:0)
如果要传递带有参数的URL作为URL中的值并通过javascript函数传递,例如。
将URL值通过PHP urlencode()
函数传递两次,如此
<?php
$url = "index.php?id=4&pg=2";
$url = urlencode(urlencode($url));
echo "<a href=\"javascript:openWin('page.php?url=$url');\">";
?>
在由javascript函数(page.php)打开的页面上,您只需要urldecode()
一次,因为当javascript&#39;触及&#39;通过它的URL,它自己解码URL。因此,只需在PHP脚本中再次对其进行解码即可完全撤消双重编码。
<?php
$url = urldecode($_GET['url']);
?>
如果您不这样做,您会发现目标脚本中的结果网址值缺少?
问号后面的所有var =值。
index.php?id=4
请检查此在线工具:URL Encode,URL Decode