如果URL包含引号,您如何指定rel = canonical值?

joe*_*von 4 php security seo canonical-link

说你的URL的路径是:

/thisisa"quote/helloworld/
Run Code Online (Sandbox Code Playgroud)

那么如何创建rel=canonicalURL?

这是犹太人吗?

<link rel="canonical" href="/thisisa&amp;quot;/helloworld/" />
Run Code Online (Sandbox Code Playgroud)

UPDATE

为了澄清,我收到表单提交,我需要将部分查询字符串转换为URL.所以步骤是:

  1. .htaccess执行重定向
  2. PHP将目录作为查询字符串处理.
  3. 查询字符串将动态插入到:
    • 标题,
    • 描述,
    • 关键词
    • 规范URL.
    • 吐回到表单的输入框中

所以我需要知道每一步都要做哪些处理......在第一次切割时,这是我的看法:

  • 标题: htmlspecialchars($rawQuery)
  • 描述: htmlspecialchars($rawQery)
  • 关键词: htmlspecialchars($rawQuery)
  • 规范网址:这是棘手的部分.它必须匹配相同的URL .htaccess重定向到,但即便如此,我认为原始查询是不安全的,因为引号可能会导致JavaScript注入.担心urlencode($rawquery)因为它来自URL,它不会已经被URL编码了吗?
  • 吐回形式: htmlspecialchars($rawQuery)

Gum*_*mbo 7

你必须将你的问题分成两部分:

我是否需要在URL路径中对双引号字符进行编码?

是的,在plain中不允许使用引号字符(U + 0022),并且必须使用%22.

我是否需要在HTML属性值中编码双引号字符?

这取决于您如何声明属性值:

默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)分隔所有属性值.当值由双引号分隔时,单引号可以包含在属性值中,反之亦然.作者也可以使用数字字符引用来表示双引号(&#34;)和单引号(&#39;).对于双引号,作者也可以使用字符实体引用&quot;.

  • 如果您使用双引号字符来声明属性值(attr="value"),那么你必须使用字符引用(&quot;,&#34;&#x22;)对属性值声明中的douvke引号标记字符进行编码.
  • 如果您使用单引号字符(U + 0027)作为属性值声明(attr='value'),那么你不需要编码引号字符.但建议这样做.

由于您的属性值中包含斜杠和双引号,因此第三种情况(根本不使用引号)不适用:

在某些情况下,作者可以指定没有任何引号的属性值.属性值可能只包含字母(az和AZ),数字(0-9),连字符(ASCII十进制45),句点(ASCII十进制46),下划线(ASCII十进制95)和冒号(ASCII十进制58).我们建议使用引号,即使可以消除它们.

现在把两个答案放在一起

由于双引号必须在URL中编码(但单引号为!),您可以使用以下命令对路径段或URL路径执行此操作:

$path = '/thisisa"quote/helloworld/';
$path = implode('/', array_map('rawurlencode', explode('/', $path)));
Run Code Online (Sandbox Code Playgroud)

如果要将该URL路径放在HTML属性中,请使用该htmlspecialchars函数对剩余的特殊HTML字符进行编码:

echo '<link rel="canonical" href="' . htmlspecialchars($path) . '" />';
Run Code Online (Sandbox Code Playgroud)