linebreak met sprint() in PHP

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Eager
  • Registratie: April 2005
  • Laatst online: 03-10 20:02
Mijn vraag
Ben bezig met een WooCommerce website. Heb de "notice" aangepast als je een artikel in de mand geplaatst heb als volgt:

code:
1
$added_text = sprintf( _n( 'Thank you! %s has been added to your cart.', '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ),


So far so good.
Maar ik wil een break na "Thank you" zodat je dit krijgt:

Thank you
Article has been added to your cart.

Wat ik al gevonden of geprobeerd heb
Ik heb het geprobeerd met " /n" en "</br>" maar dat wordt gewoon geprint inplaats van dat mijn regel breekt.

Hoe doe ik dit op de juiste manier?

Beste antwoord (via Eager op 04-07-2018 17:09)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan moet je de <br> hebben (en hebben we 't hier dus over HTML output). Echter, als jij <br> ziet verschijnen i.p.v. dat de tekst omloopt naar een nieuwe regel dan betekent dat dat die tekst (zoals 't hoort eigenlijk) netjes escaped wordt. En zul je daar dus omheen moeten zien te komen, Ik ken Wordpress/WooCommerce verder niet (vanuit programmeerperspectief welteverstaan), maar de esc_html__ lijkt me een goed begin (laat dat eens weg?).

Dus, maak van esc_html__( $added_text ) eens 'gewoon' $added_text op regel 9 en vervang de \n door <br> op regel 6. Realiseer je daarbij wel dat je potentieel een injection vulnerability introduceert als je niet 100% volledige controle over de inhoud van $added_text hebt.

offtopic:
Het is "Continue shopping" ;)


Edit: 3 seconden googlen leerde me dat mijn gok klopt.
.oisyn schreef op woensdag 4 juli 2018 @ 17:08:
Wat je denk ik eigenlijk wilt is die hele eerste sprintf weghalen en dat verwerken in de tweede sprintf, waar je bovendien esc_html__ toepast op de juiste delen.
Nóg beter inderdaad!

[ Voor 59% gewijzigd door RobIII op 04-07-2018 17:29 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • +1 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Nu online

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Eerste resultaat op google voor php sprintf newline: https://stackoverflow.com...when-using-sprintf-in-php

Je dient dus \n te gebruiken en bovendien moet dat binnen " " staan.

[ Voor 5% gewijzigd door Orion84 op 04-07-2018 15:23 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • Eager
  • Registratie: April 2005
  • Laatst online: 03-10 20:02
Bedankt, maar die had ik uiteraard ook al gevonden. Als ik dat doe, als volgt:

code:
1
$added_text = sprintf( _n( 'Thank you! "\n" %s has been added to your cart.', '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ),


krijg ik:
Thank you! "\n" article has been added to your cart.

Of mis ik wat?

Acties:
  • +1 Henk 'm!

  • Merethil
  • Registratie: December 2008
  • Laatst online: 06:21
Eager schreef op woensdag 4 juli 2018 @ 15:57:
Bedankt, maar die had ik uiteraard ook al gevonden. Als ik dat doe, als volgt:

code:
1
$added_text = sprintf( _n( 'Thank you! "\n" %s has been added to your cart.', '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ),


krijg ik:
Thank you! "\n" article has been added to your cart.

Of mis ik wat?
Je moet geen double quotes binnen je single quotes gebruiken, de hele String moet in double quotes staan. Dat is iig wat ik denk te lezen als ik die link volg.

[ Voor 4% gewijzigd door Merethil op 04-07-2018 15:59 ]


Acties:
  • +1 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Eager schreef op woensdag 4 juli 2018 @ 15:57:
Bedankt, maar die had ik uiteraard ook al gevonden. Als ik dat doe, als volgt:

code:
1
$added_text = sprintf( _n( 'Thank you! "\n" %s has been added to your cart.', '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ),


krijg ik:
Thank you! "\n" article has been added to your cart.

Of mis ik wat?
Ja je \n (en ") staan tussen enkele quotes...

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
$added_text = sprintf( _n('Thank you! "\n" %s has been added to your cart.'....
De single quotes (', in rood) moeten double quotes (") zijn/worden en de quotes rondom \n moeten weg. En pas op dat je "gewone" double-quotes gebruikt en géén smart quotes

[ Voor 45% gewijzigd door RobIII op 04-07-2018 16:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Eager
  • Registratie: April 2005
  • Laatst online: 03-10 20:02
Nog steeds staat alles op één lijn. In de broncode staat het wel op twee regels, maar daar hebben we niet veel aan:

<div class="woocommerce-message" role="alert">Thank you!
article has been added to your cart

dit is wat ik nu heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
add_filter ( 'wc_add_to_cart_message_html', 'wc_add_to_cart_message_filter_html', 10, 2 );
function wc_add_to_cart_message_filter_html($message, $product_id = null) {
$titles[] = get_the_title( $product_id );

$titles = array_filter( $titles );
$added_text = sprintf( _n( "Thank you! \n %s has been added to your cart.", '%s have been added to your cart.', sizeof( $titles ), 'woocommerce' ), wc_format_list_of_items( $titles ) );

$message = sprintf( '%s<br><a href="%s" class="">%s</a> or <a href="%s" class="">%s</a>',
                esc_html__( $added_text ),
                esc_url( wc_get_page_permalink( 'shop' ) ),
                esc_html__( 'Continu shopping', 'woocommerce' ),
                esc_url( wc_get_page_permalink( 'cart' ) ),
                esc_html__( 'View Cart', 'woocommerce' ));

return $message;}

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan moet je de <br> hebben (en hebben we 't hier dus over HTML output). Echter, als jij <br> ziet verschijnen i.p.v. dat de tekst omloopt naar een nieuwe regel dan betekent dat dat die tekst (zoals 't hoort eigenlijk) netjes escaped wordt. En zul je daar dus omheen moeten zien te komen, Ik ken Wordpress/WooCommerce verder niet (vanuit programmeerperspectief welteverstaan), maar de esc_html__ lijkt me een goed begin (laat dat eens weg?).

Dus, maak van esc_html__( $added_text ) eens 'gewoon' $added_text op regel 9 en vervang de \n door <br> op regel 6. Realiseer je daarbij wel dat je potentieel een injection vulnerability introduceert als je niet 100% volledige controle over de inhoud van $added_text hebt.

offtopic:
Het is "Continue shopping" ;)


Edit: 3 seconden googlen leerde me dat mijn gok klopt.
.oisyn schreef op woensdag 4 juli 2018 @ 17:08:
Wat je denk ik eigenlijk wilt is die hele eerste sprintf weghalen en dat verwerken in de tweede sprintf, waar je bovendien esc_html__ toepast op de juiste delen.
Nóg beter inderdaad!

[ Voor 59% gewijzigd door RobIII op 04-07-2018 17:29 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 06-10 16:38

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat je denk ik eigenlijk wilt is die hele eerste sprintf weghalen en dat verwerken in de tweede sprintf, waar je bovendien esc_html__ toepast op de juiste delen.
RobIII schreef op woensdag 4 juli 2018 @ 16:52:
offtopic:
Het is "Continue shopping" ;)
offtopic:
Niet volgens mijn vrouw, die is continu aan het shoppen :/

[ Voor 28% gewijzigd door .oisyn op 04-07-2018 17:11 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Eager
  • Registratie: April 2005
  • Laatst online: 03-10 20:02
Yep, dat is hem. Stomme was dat ik al het geprobeerd had zonder die esc_html maar dan zonder HTML, ofwel <br>.

Anyway, bedankt!
die is continu aan het shoppe
ha, dacht hetzelfde, het is maar vanuit welk perspectief je het bekijkt.
Maar heb het toch maar aangepast.

[ Voor 38% gewijzigd door Eager op 04-07-2018 17:12 ]

Pagina: 1