【问题标题】:URL encoding. Very difficult网址编码。非常困难
【发布时间】:2012-05-24 06:57:08
【问题描述】:

我有一个这样的日语字符串(从数据库中获取)

$myString = "いっぱいんどん"

因为 API 要求输入字符串必须是 URL 编码的,所以我使用它进行编码

urlencode($myString);

问题是 API 平台页面在文本区域中显示该字符串。

如您所知,HTML texarea 不允许使用 HTML 换行。它只允许“ ”显示换行符。

所以现在我不知道如何在API平台的textarea中显示$myString

我的工作流程:我的网站 -> 将 $myString 传递给 API -> $myString 显示在 API 平台页面(不是我的)

更新:

API 是这样的

< a href="diary:self?guid=ON&url=http%3A%2F%2Fredirect_uri.com&subject=%83e%83X%83g&body=....">Something< /a>

我必须将 myString 传递给 body=...

更新:

这是我尝试过的:

function convertBrTagtoASCII($string) {
    $string = str_replace(array("</br>", "</br >", "<br>", "<br >"), "&#10;", $string);
    return $string;
}

$converted = convertBrTagtoASCII($myString);

将所有 br 标记替换为 & #10;,然后是 urlencode($converted),然后传递给 API 链接的“body”参数。 textarea中的输出是

いっぱい&#10;んどん

似乎平台不仅urldecode而且还转义字符串。 :(

【问题讨论】:

  • 你不能只使用某种正则表达式转换将 urlencoded 结果中的所有"&lt; br /&gt;" 转换为"&amp;#10" 的吗?编辑:或者您无法控制平台页面。在这种情况下,您可以在将其提交给urlencode 函数之前进行转换吗?
  • $myString = "いっぱい".'\n'."んどん";
  • 另外,你可以在 textareas 中使用 "\n",所以你可以使用 str_replace();用“\n”替换“
  • @zebedia49: 如果我先对 mystring 进行 urlencode,我不能 preg_replace 用 替换
    ,因为该标签已更改。
  • @Lex:在 Chrome 中,\n 不会在 textarea 中打印换行符。自己试试 >>

标签: php html line-breaks


【解决方案1】:

使用htmlentities 转义特殊的HTML 字符,例如&lt;

echo '<textarea>'.htmlentities($myString).'</textarea>'

在 textarea 元素中,您可以使用换行符,因此无需对它们进行特殊转义。

编辑:也许我误解了这个问题,您的数据库中已经有&lt;br&gt; 标签。在这种情况下,您可以用换行符替换这些标签。另一种方法是使用富文本编辑框,例如 TinyMCE,它确实支持 HTML 编辑。

【讨论】:

  • 问题是 textarea 不是我的(它是 API 页面),我无法对那个页面做任何事情。
【解决方案2】:

您没有编码问题,您有无效数据问题。您要发送到 API 的字符串在 API 上下文中无效。 "Hello&lt;br /&gt;World" 也会有同样的问题。

有三种可能:

  • 字符串应该是"Hello&amp;lt;br /&amp;gt;World""いっぱい&amp;lt; br /&amp;gt;んどん",在这种情况下,您可以简单地修复它(及其表亲)
  • 字符串应该是"Hello\nWorld""いっぱい\nんどん",在这种情况下,您需要一个正则表达式或类似工具来修复它,然后再进行urlencoding。
  • 字符串确实格式不正确:在这种情况下,您应该同时拒绝:"Hello&lt;br /&gt;World""いっぱい&lt; br /&gt;;んどん"

要点是,这不是编码或您的代码的属性:是的,您可以尝试修复明显的缺陷,但没有黄金法则

【讨论】:

  • 你的意思是 $mystring 无效吗?该字符串存储在数据库中,我只是从中获取它。数据库归客户所有。 :S
  • 是的,我的意思是 $mystring 无效,或者 API 规范不完整。我猜想,数据库归客户所有,但仅此一项并不能使所有值都有效......
【解决方案3】:

将您的休息时间转换为 ascii。然后对 URL 进行编码。 然后运行正则表达式替换以转换编码的换行符

%26%2310%3B

返回

&#10;

【讨论】:

  • 该字符串按平台显示。我只是通过它。所以我没有你说的 preg_replace 权限。
猜你喜欢
  • 2016-12-24
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多